• 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		price		author");
    		for(IBook book:bookList){
    			System.out.println(book.getName()+"		¥"+book.getPrice()+"		"+book.getAuthor());
    		}
    	}
    	public static void main(String[] args){
    		BookStore bookStore=new BookStore();
    		bookStore.showBooks();
    	}
    }
    


  • 相关阅读:
    转:CRF++
    ProBase
    图形数据库 Neo4j 开发实战
    Linux 下升级python和安装pip
    TensorFlow (RNN)深度学习 双向LSTM(BiLSTM)+CRF 实现 sequence labeling 序列标注问题 源码下载
    开源项目kcws代码分析--基于深度学习的分词技术
    文本情感分类(二):深度学习模型
    文本情感分类(一):传统模型
    重要博文
    LSTM 文本情感分析/序列分类 Keras
  • 原文地址:https://www.cnblogs.com/javafly/p/6037119.html
Copyright © 2020-2023  润新知