DesignPattern_Java:设计模式分类和设计原则

设计模式分类:

创建型:

单例模式(Singleton Pattern)

工厂方法模式(Factory Pattern)

抽象工厂模式(Abstract Factory)

建造者模式(Builder Pattern)

原型模式(Prototype Pattern)

结构型:

代理模式(Proxy)

装饰模式(Decorator)

适配器模式(Adapter)

组合模式(Composite)

桥梁模式(Bridge)

外观模式(Facade)

享元模式(Flyweight)

行为型:

模板方法模式(Template Method)

命令模式(Command)

责任链模式(Chain of Responsibility)

策略模式(Strategy)

迭代器模式(Iterator)

中介者模式(Mediator)

观察者模式(Observer)

备忘录模式(Memento)

访问者模式(Visitor)

状态模式(State)

解释器模式(Interpreter)

设计原则:

单一职责原则 Single Responsibility Principle

User.java

package com.DesignPattern.principle.srp;

public class User {

	private String username;
	private String userpass;
	private int role;
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getUserpass() {
		return userpass;
	}
	public void setUserpass(String userpass) {
		this.userpass = userpass;
	}
	public int getRole() {
		return role;
	}
	public void setRole(int role) {
		this.role = role;
	}

}

BaseDao.java

package com.DesignPattern.principle.srp;

public class BaseDao {

}

UserDao.java

package com.DesignPattern.principle.srp;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class UserDao extends BaseDao {
	//返回所有用户
	public List<User> getAllUser() {
		List<User> userList = new ArrayList<User>();
		String sql = "SELECT * FROM userdetail";
		ResultSet rs = this.executeQuery(sql, null);
		try {
			while (rs.next()) {
				User user = new User();
				user.setUsername(rs.getString("username"));
				user.setUserpass(rs.getString("userpass"));
				user.setRole(rs.getInt("role"));
				userList.add(user);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			this.closeAll();
		}
		return userList;
	}
	//根据用户名查找用户
	public User getUserByName(String name) {
		User user=null;
		String sql="SELECT * FROM userdetail WHERE username=?";
		ResultSet rs=this.executeQuery(sql, new String[]{name});
		try {
			if(rs.next()){
				user=new User();
				user.setUsername(rs.getString("username"));
				user.setUserpass(rs.getString("userpass"));
				user.setRole(rs.getInt("role"));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			this.closeAll();
		}
		return user;
	}

	//添加新用户
	public boolean addUser(User user){
		boolean r=false;
		String sql="INSERT INTO userdetail(username,userpass,role)values(?,?,?)";
		int rs=this.executeUpdate(sql,new String[]{user.getUsername(),user.getUserpass(),""+user.getRole()});
		if(rs>0){
			r=true;
		}
		return r;
	}
	private int executeUpdate(String sql, String[] strings) {
		return 0;
	}

	private void closeAll() {

	}

	private ResultSet executeQuery(String sql, Object object) {
		return null;
	}
}

UserManager.java

package com.DesignPattern.principle.srp;

public class UserManager {
	private UserDao userDao=new UserDao();
	//验证用户名和密码
	public boolean checkUser(String name,String pass){
		boolean flag=false;
		User user=userDao.getUserByName(name);
		if(user!=null&&user.getUserpass().equals(pass)){
			flag=true;
		}
		return flag;
	}
	//注册新用户
	public void registUser(User user){
		if(userDao.getUserByName(user.getUsername())!=null){
			System.out.println("change username");
			return;
		}
		if(userDao.addUser(user)){
			System.out.println("success");
		}else{
			System.out.println("fail");
		}
	}
}

里氏替换原则 Liskov Substitution Principle

Animal.java

package com.DesignPattern.principle.lsp;

public abstract class Animal {
	public abstract void move();
}

Horse.java

package com.DesignPattern.principle.lsp;

public class Horse extends Animal {

	@Override
	public void move() {
		System.out.println("horse run");
	}

}

Bird.java

package com.DesignPattern.principle.lsp;

public class Bird extends Animal{

	@Override
	public void move() {
		System.out.println("bird fly");
	}

}

TestLSP.java

package com.DesignPattern.principle.lsp;

public class TestLSP {
	public static void main(String[] args){
		Animal animal;
		animal=new Horse();
		animal.move();
		animal=new Bird();
		animal.move();
	}
}

依赖倒置原则 Dependence Inversion Principle

IDriver.java

package com.DesignPattern.principle.dip;

public interface IDriver {
	public void drive(ICar car);
}

Driver.java

package com.DesignPattern.principle.dip;

public class Driver implements IDriver {

	@Override
	public void drive(ICar car) {
		car.run();
	}

}

ICar.java

package com.DesignPattern.principle.dip;

public interface ICar {
	public void run();
}

Benz.java

package com.DesignPattern.principle.dip;

public class Benz implements ICar{
	public void run(){
		System.out.println("Benz run");
	}
}

BMW.java

package com.DesignPattern.principle.dip;

public class BMW implements ICar{

	@Override
	public void run() {
		System.out.println("BMW run...");
	}

}

TestDIP.java

package com.DesignPattern.principle.dip;

public class TestDIP {
	public static void main(String[] args){
		IDriver tom=new Driver();
		ICar car=new Benz();
		tom.drive(car);
		car =new BMW();
		tom.drive(car);
	}
}

接口隔离原则 Interface Segregation Principle

IOrderForPortal.java

package com.DesignPattern.principle.isp;

public interface IOrderForPortal {
	public String getOrder();
}

IOrderForOtherSys.java

package com.DesignPattern.principle.isp;

public interface IOrderForOtherSys {
	public void insertOrder();
}

IOrderForAdmin.java

package com.DesignPattern.principle.isp;

public interface IOrderForAdmin{
	public String getOrder();
	public void insertOrder();
	public void updateOrder();
	public void deleteOrder();
}

Order.java

package com.DesignPattern.principle.isp;

public class Order implements IOrderForAdmin,IOrderForOtherSys,IOrderForPortal {

	public static Order getOrderFor(){
		return new Order();
	}

//	public static IOrderForOtherSys getOrderForOtherSys{
//		return new Order();
//	}

//	public static IOrderForAdmin getOrderForAdmin{
//		return new Order();
//	}

	@Override
	public String getOrder() {
		return "get Order";
	}

	@Override
	public void insertOrder() {
		System.out.println("insert Order...");
	}

	@Override
	public void updateOrder() {
		System.out.println("update Order...");
	}

	@Override
	public void deleteOrder() {
		System.out.println("delete Order...");
	}

}

TestISP.java

package com.DesignPattern.principle.isp;

public class TestISP {

	public static void main(String[] args){
		IOrderForPortal op=Order.getOrderFor();
		System.out.println(op.getOrder());
		IOrderForOtherSys os=Order.getOrderFor();
		os.insertOrder();
		IOrderForAdmin oa=Order.getOrderFor();
		System.out.println(oa.getOrder());
		oa.insertOrder();
		oa.updateOrder();
		oa.deleteOrder();
	}
}

迪米特原则 Law of Demeter

Someone.java

package com.DesignPattern.principle.LoD;

public class Someone {

	public void call(Friend friend){
		friend.forward();
	}
}

Friend.java

package com.DesignPattern.principle.LoD;

public class Friend {

	private Stranger stranger=new Stranger();
	public void forward(){
		stranger.strangerMethod();
	}
	public void friendMethod(){
		System.out.println("this friend's Methoed");
	}
}

Stranger.java

package com.DesignPattern.principle.LoD;

public class Stranger {
	public void strangerMethod(){
		System.out.println("this is stranger's method");
	}
}

TestLod.java

package com.DesignPattern.principle.LoD;

public class TestLoD {

	public static void main(String[] args){
		Someone one =new Someone();
		one.call(new Friend());
	}
}

开闭原则 Open-Closed Principle

IBook.java

package com.DesignPattern.principle.ocp;

public interface IBook {

	public String getName();
	public double getPrice();
	public String getAuthor();
}

NovelBook.java

package com.DesignPattern.principle.ocp;

public class NovelBook implements IBook {

	private String name;
	private double price;
	private String author;

	public NovelBook(String name, double price, String author) {
		super();
		this.name = name;
		this.price = price;
		this.author = author;
	}

	@Override
	public String getName() {
		return this.name;
	}

	@Override
	public double getPrice() {
		return this.price;
	}

	@Override
	public String getAuthor() {
		return this.author;
	}

}

BookStore.java

package com.DesignPattern.principle.ocp;

import java.util.ArrayList;

public class BookStore {

	private ArrayList<IBook> bookList=new ArrayList<IBook>();
	public BookStore(){
		bookList.add(new NovelBook("xiyouji",99,"wuchenen"));
		bookList.add(new NovelBook("shuihu",99,"shishi"));
	}
	public void showBooks(){
		System.out.println("--------------------bookList-------------------");
		System.out.println("bookname\t\tprice\t\tauthor");
		for(IBook book:bookList){
			System.out.println(book.getName()+"\t\t¥"+book.getPrice()+"\t\t"+book.getAuthor());
		}
	}
	public static void main(String[] args){
		BookStore bookStore=new BookStore();
		bookStore.showBooks();
	}
}

版权声明:本文为博主原创文章,未经博主允许不得转载|Copyright ©2011-2015,Supernatural, All Rights Reserved.

时间: 2024-12-27 11:04:22

DesignPattern_Java:设计模式分类和设计原则的相关文章

程序员你该学学如何设计PPT了,设计PPT的几大原则

写代码也要读书,爱全栈,更爱生活.每日更新原创IT编程技术及日常实用视频. 我们的目标是:玩得转服务器Web开发,搞得懂移动端,电脑客户端更是不在话下. 大量的汇报及介绍工作,都离不开一个辅助工具-PPT.作为程序员,你更该学学PPT设计了. 此篇文章介绍设计PPT的一些原则,助你成就完美高大上的PPT. PPT的三类用途: 作为视觉辅助,方便观众理解 作为文章的阅读, 自动演示,宣传. 避免误用PPT: 对于有些地方不适合做PPT的地方,使用白板. 对PPT提炼要点,不要大篇幅的文字. 使用P

优秀API设计的十大原则

优秀API设计的十大原则 2015-09-23    分类:编程开发.设计模式.首页精华暂无人评论 分享到:更多4 二十万年薪PHP工程师培养计划 成为被疯抢的Android牛人 风中叶讲Java重难点 Linux运维基础课程 本文由码农网 – 小峰原创翻译,转载请看清文末的转载要求,欢迎加入技术翻译小组! 每个软件开发人员都使用API.“优秀”的API设计就像魔法.不过,我不知道有多少人可以解释为什么有的API很复杂.很难学,而有的则干净.简单.使用起来堪称是一种快乐.关于这个问题,我将在文中

用户体验设计的五个原则(转)

[编者按]本文作者,现Aura Marker Studio创始人@路意Louis,曾带过五年多的用户体验设计团队.这篇文章是他带团队这几年沉淀下来的一些经验和思考. “设计,必须是充满诗意的.” 带过五年多的用户体验设计团队,从几个人到二十几个人.以前自己也做过技术,发现工程师和设计师其实是有很多相近的地方的,那就是都有追求. 带领团队,并不是管好人就行了(所谓的行政管理),更是要实现业务的成功,给团队定目标,定追求,然后与大家一起想办法达成.这五个设计原则就是在团队日益变大,项目越来越多,团队

写给自己看的小设计3 - 对象设计通用原则之核心原则

由于对象设计的核心是类,所以下面的原则也都基本都是讨论类的设计问题,其它类型的元素都比较简单,基本上也符合大多数这里列出的原则. 前面我们分析完了对象设计的基本原则,这里我将重新温习一下对象设计的核心原则 - SOLID原则.几乎所有的设计模式都可以看到这些原则的影子. 单一职责原则(SRP):做一个专一的人 单一职责原则的全称是Single Responsibility Principle,简称是SRP.SRP原则的定义很简单: 即不能存在多于一个导致类变更的原因.简单的说就是一个类只负责一项

C++类设计过程中的原则(总结)

一.由编译器生成的成员函数 1)默认的构造函数 默认构造函数定义为没有参数,或者有默认的参数值.当用户自己未定义时,系统可以提供. 自动生成的默认构造函数,会调用继承的基类的默认构造函数来构造派生类的基类部分. 若Star是一个类,则 Star orig; Star array[6];都将需要默认构造函数. 如果自己定义了构造函数,则系统不会再生成默认构造函数,这个时候最好自己要定义一个默认构造函数. 构造函数 -- [确保对象的生成] -- 最好提供显式的默认构造函数,以确保对象能够正确的初始

C#软件设计——小话设计模式原则之:开闭原则OCP

前言:这篇继续来看看开闭原则.废话少说,直接入正题. 软件设计原则系列文章索引 C#软件设计——小话设计模式原则之:依赖倒置原则DIP C#软件设计——小话设计模式原则之:单一职责原则SRP C#软件设计——小话设计模式原则之:接口隔离原则ISP C#软件设计——小话设计模式原则之:开闭原则OCP 一.原理介绍 1.官方定义 开闭原则,英文缩写OCP,全称Open Closed Principle. 原始定义:Software entities (classes, modules, functi

Java语言编程学习之Lambda表达式设计和架构的原则[图]

Java语言编程学习之Lambda表达式设计和架构的原则[图]:大家都知道,Lambda表达式是对Java语言的一点简单改进,在JDK标准类库中,运行它的方式各种各样.但是大多数的Java代码都不是由开发JDK的程序猿写的,而是像我们这样的普通程序猿.很多人都会碰到过这样的情况:你实现了一个新功能或修复了一个缺陷,并且对自己的修改很满意.但其他人看了你的代码后--也许发生在代码审查环节,完全不买账!对于什么是好代码,什么是坏代码,存在分歧很正常!设计模式的改变设计模式是人们熟悉的另一种设计思想,

框架源码系列一:设计模式(设计思想、设计原则、各种设计模式介绍、设计模式总结)

要分析常用框架spring.mybatis.springboot.springcloud等的源码,首先要了解各种设计模式,因为框架里面应用了各种设计模式 一.设计思想 学习设计模式最重要的是掌握设计思想和设计原则,理解了设计思想和设计原则并运用到平时的编码中是最重要的!!! 1. 我们先来看下面的问题: 天天加班编程,编程到底都做的是什么? 撸代码,加班撸代码,写接口.写类.写方法 用设计模式或做设计的作用是什么? 指导.规定该如何撸代码,如何来写接口.写类.写方法 为什么要做设计.用设计模式?

NET架构设计、框架设计系列文章总结

NET架构设计.框架设计系列文章总结 从事.NET开发到现在已经有七个年头了.慢慢的可能会很少写.NET文章了.不知不觉竟然走了这么多年,热爱.NET热爱c#.突然想对这一路的经历进行一个总结. 是时候开始下一阶段的旅途,希望这些文章可以在发挥点价值作用. 架构设计: ElasticSearch大数据分布式弹性搜索引擎使用 (推荐) DDD实施经验分享-价值导向.从上往下进行(圈内第一个吃螃蟹DDD实施方案)(推荐) 软件工程-思考项目开发那些事(一)(推荐) SOA架构设计经验分享-架构.职责