博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DesignPattern_Java:设计模式分类和设计原则
阅读量:4327 次
发布时间:2019-06-06

本文共 8482 字,大约阅读时间需要 28 分钟。

设计模式分类:

创建型:

单例模式(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
getAllUser() { List
userList = new ArrayList
(); 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
bookList=new ArrayList
(); 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(); }}

转载于:https://www.cnblogs.com/javafly/p/6037119.html

你可能感兴趣的文章
mybatis使用collection查询集合属性规则
查看>>
linux查看文件的编码格式的方法 set fileencoding PYTHON
查看>>
Git 问题:SSL certificate problem: self signed certificate
查看>>
安全测试
查看>>
作业代码
查看>>
网络抓取功能实现 将获取的结果进行过滤并写入到TXT文档中
查看>>
暑假集训-7.31总结
查看>>
安卓:动态注册广播
查看>>
Oracle系列--基础理论
查看>>
广州.NET微软技术俱乐部微信群各位技术大牛的blog
查看>>
npm安装vue-cli时速度慢,fetchMetadata经常卡住并报异常
查看>>
POJ:1703-Find them, Catch them(并查集好题)(种类并查集)
查看>>
HDU:5040-Instrusive
查看>>
校验器
查看>>
thread/threading——Python多线程入门笔记
查看>>
linux 命令汇总(搜索、fdfs、常用命令),虚拟机dump文件
查看>>
Nginx 反向代理解决浏览器跨域问题
查看>>
为什么现在我最终推荐内存OLTP
查看>>
git error: failed to push some refs to...
查看>>
Markdown指南
查看>>