设计模式分类:

创建型:

单例模式(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 {@Overridepublic void move() {System.out.println("horse run");}}

Bird.java

package com.DesignPattern.principle.lsp;public class Bird extends Animal{@Overridepublic 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 {@Overridepublic 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{@Overridepublic 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();
//  }@Overridepublic String getOrder() {return "get Order";}@Overridepublic void insertOrder() {System.out.println("insert Order...");}@Overridepublic void updateOrder() {System.out.println("update Order...");}@Overridepublic 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;}@Overridepublic String getName() {return this.name;}@Overridepublic double getPrice() {return this.price;}@Overridepublic 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();}
}

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

DesignPattern_Java:设计模式分类和设计原则相关推荐

  1. 23种设计模式分类+SOLID设计原则+从设计模式角度看MVC框架

    目的:设计模式旨在帮助使用者设计可维护.可扩展.可复用.灵活性好的系统 1.  23中设计模式分类 1.1 创建型模式(5个) 工厂方法模式(Factory Method) 抽象工厂模式 (Abstr ...

  2. 其他系统 对外接口设计_设计模式分类及设计原则

    点击蓝字,关注我们 01 概述 设计模式的基础是:多态. 学习设计模式将有助于更加深入地理解面向对象思想,让你知道: 1.如何将代码分散在几个不同的类中? 2.为什么要有"接口"? ...

  3. 设计模式--1(设计模式基础,设计模式基本原则,设计模式分类)

    设计模式基础 模式 在一定环境中解决某一问题的方案,包括三个基本元素–问题,解决方案和环境. 大白话:在一定环境下,用固定套路解决问题. 设计模式 是一套被反复使用.多数人知晓的.经过分类编目的.代码 ...

  4. 架构学习01- 03基本原则和23个设计模式分类

    对接口编程而不是对实现编程. 优先使用对象组合而不是继承. 六大原则 单一职责原则 前端写页面,后端写逻辑. 即: 只负责自己分内之事,让单个模块更简单且复用,高内聚. 开闭原则 实现一个热拔插的效果 ...

  5. UI设计培训分享:app图标设计要遵循哪些原则

    APP图片设计是UI设计工作中经常会遇到的,一个好的APP产品,图标的设计是非常重要的,本期小编为大家分享的UI设计培训教程就是app图标设计要遵循哪些原则?来看看下面的详细介绍. UI设计培训分享: ...

  6. UI设计学习的对比原则怎么运用?

    本期小编为大家介绍的UI设计培训教程就是关于UI设计学习的对比原则怎么运用?因为在UI设计中分组原则这一项在文字排版中运用的几率是比较频繁的,并且分组对于层次感和整合信息都有一定的帮助,但是光有分组还 ...

  7. 用户接口设计的20个原则

    世界级图形设计大师 Paul Rand(保罗.兰德)曾经说过:"设计绝不是简单的排列组合与简单地再编辑,它应当充满着价值和意义,去说明道理,去删繁就简,去阐明演绎,去修饰美化,去赞美褒扬,使 ...

  8. 软件设计中的一些原则

    本文为大家介绍软件设计中的一些原则,都是经过长期经验总结出来的知识,每一个程序员都应该了解,相信对大家在进行软件设计的过程中会有很大帮助. Don't Repeat Yourself (DRY) DR ...

  9. C#软件设计——小话设计模式原则之:依赖倒置原则DIP

    前言:很久之前就想动笔总结下关于软件设计的一些原则,或者说是设计模式的一些原则,奈何被各种bootstrap组件所吸引,一直抽不开身.群里面有朋友问博主是否改行做前端了,呵呵,其实博主是想做" ...

  10. 【干货】原型设计的八大指导原则

    产品原型设计没有你想象的那么难.实际上,相当容易.任何人都可以做原型.而且就像其他事情一样,熟能生巧.但这其中也有陷阱--搞砸原型设计也很容易. 我自己碰到.看到或者听到的大部分错误并不是因为选择了错 ...

最新文章

  1. 显示DataGrid序号的一个适用的方法
  2. 应届前端面试——看这篇就够了(一)
  3. [js高手之路]深入浅出webpack教程系列9-打包图片(file-loader)用法
  4. JVM 调优实战--VisualVM综合分析可视化工具的使用教程(含远程JMX连接)
  5. 使用openSSL构造一个支持https的nodejs服务器
  6. 我和阿里巴巴的孽缘(一)
  7. linux命令--ldconfig和ldd用法
  8. matlab中用于离散系统求解的命令,MATLAB求解规划问题(线性规划, 整数规划, 非线性规划)...
  9. 我看过的安全方面的好文章
  10. asp.net 下载文件几种方式
  11. OpenCV里的常用Rect用法
  12. AI未来是什么样子,这些科幻电影里已经有了答案
  13. 浅谈四轴PID调试心得
  14. 宝石与石头(简单难度)
  15. PTA 7-3 查询水果价格 (15 分)
  16. 使用aspose-slides将ppt转pdf
  17. WPF编程,使用字体图标的一种方法。
  18. 2020-10-24 python命令行多行输入
  19. java去除音频无声_如何给视频消音 把视频中的声音去掉只留视频画面
  20. 数据结构与算法-打印等腰三角形算法

热门文章

  1. 基于Python的优化函数可视化
  2. Python实现基于TF-IDF抽取文本数据关键词
  3. python交互式shell之jupyter notebook初步安装使用
  4. C++ boost共享锁 unique_lock shared_lock
  5. win7信息服务器,Windos2012 中的共享,win8/win10用户访问正常,WIN7用户不能访问
  6. sed替换html标签,sed多次替换
  7. linux c自写时钟,关于internal_add_timer函数(linux/kernel/timer.c中定义的)的一个问题
  8. linux安装mysql8.0.18_详解mysql8.018在linux上安装与配置过程
  9. excel 日期格式 mysql_EXCEL和MySQL日期格式之间的转换
  10. html异步 post,Jquery中Ajax/Post同步和异步请求