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 {@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:设计模式分类和设计原则相关推荐
- 23种设计模式分类+SOLID设计原则+从设计模式角度看MVC框架
目的:设计模式旨在帮助使用者设计可维护.可扩展.可复用.灵活性好的系统 1. 23中设计模式分类 1.1 创建型模式(5个) 工厂方法模式(Factory Method) 抽象工厂模式 (Abstr ...
- 其他系统 对外接口设计_设计模式分类及设计原则
点击蓝字,关注我们 01 概述 设计模式的基础是:多态. 学习设计模式将有助于更加深入地理解面向对象思想,让你知道: 1.如何将代码分散在几个不同的类中? 2.为什么要有"接口"? ...
- 设计模式--1(设计模式基础,设计模式基本原则,设计模式分类)
设计模式基础 模式 在一定环境中解决某一问题的方案,包括三个基本元素–问题,解决方案和环境. 大白话:在一定环境下,用固定套路解决问题. 设计模式 是一套被反复使用.多数人知晓的.经过分类编目的.代码 ...
- 架构学习01- 03基本原则和23个设计模式分类
对接口编程而不是对实现编程. 优先使用对象组合而不是继承. 六大原则 单一职责原则 前端写页面,后端写逻辑. 即: 只负责自己分内之事,让单个模块更简单且复用,高内聚. 开闭原则 实现一个热拔插的效果 ...
- UI设计培训分享:app图标设计要遵循哪些原则
APP图片设计是UI设计工作中经常会遇到的,一个好的APP产品,图标的设计是非常重要的,本期小编为大家分享的UI设计培训教程就是app图标设计要遵循哪些原则?来看看下面的详细介绍. UI设计培训分享: ...
- UI设计学习的对比原则怎么运用?
本期小编为大家介绍的UI设计培训教程就是关于UI设计学习的对比原则怎么运用?因为在UI设计中分组原则这一项在文字排版中运用的几率是比较频繁的,并且分组对于层次感和整合信息都有一定的帮助,但是光有分组还 ...
- 用户接口设计的20个原则
世界级图形设计大师 Paul Rand(保罗.兰德)曾经说过:"设计绝不是简单的排列组合与简单地再编辑,它应当充满着价值和意义,去说明道理,去删繁就简,去阐明演绎,去修饰美化,去赞美褒扬,使 ...
- 软件设计中的一些原则
本文为大家介绍软件设计中的一些原则,都是经过长期经验总结出来的知识,每一个程序员都应该了解,相信对大家在进行软件设计的过程中会有很大帮助. Don't Repeat Yourself (DRY) DR ...
- C#软件设计——小话设计模式原则之:依赖倒置原则DIP
前言:很久之前就想动笔总结下关于软件设计的一些原则,或者说是设计模式的一些原则,奈何被各种bootstrap组件所吸引,一直抽不开身.群里面有朋友问博主是否改行做前端了,呵呵,其实博主是想做" ...
- 【干货】原型设计的八大指导原则
产品原型设计没有你想象的那么难.实际上,相当容易.任何人都可以做原型.而且就像其他事情一样,熟能生巧.但这其中也有陷阱--搞砸原型设计也很容易. 我自己碰到.看到或者听到的大部分错误并不是因为选择了错 ...
最新文章
- 显示DataGrid序号的一个适用的方法
- 应届前端面试——看这篇就够了(一)
- [js高手之路]深入浅出webpack教程系列9-打包图片(file-loader)用法
- JVM 调优实战--VisualVM综合分析可视化工具的使用教程(含远程JMX连接)
- 使用openSSL构造一个支持https的nodejs服务器
- 我和阿里巴巴的孽缘(一)
- linux命令--ldconfig和ldd用法
- matlab中用于离散系统求解的命令,MATLAB求解规划问题(线性规划, 整数规划, 非线性规划)...
- 我看过的安全方面的好文章
- asp.net 下载文件几种方式
- OpenCV里的常用Rect用法
- AI未来是什么样子,这些科幻电影里已经有了答案
- 浅谈四轴PID调试心得
- 宝石与石头(简单难度)
- PTA 7-3 查询水果价格 (15 分)
- 使用aspose-slides将ppt转pdf
- WPF编程,使用字体图标的一种方法。
- 2020-10-24 python命令行多行输入
- java去除音频无声_如何给视频消音 把视频中的声音去掉只留视频画面
- 数据结构与算法-打印等腰三角形算法
热门文章
- 基于Python的优化函数可视化
- Python实现基于TF-IDF抽取文本数据关键词
- python交互式shell之jupyter notebook初步安装使用
- C++ boost共享锁 unique_lock shared_lock
- win7信息服务器,Windos2012 中的共享,win8/win10用户访问正常,WIN7用户不能访问
- sed替换html标签,sed多次替换
- linux c自写时钟,关于internal_add_timer函数(linux/kernel/timer.c中定义的)的一个问题
- linux安装mysql8.0.18_详解mysql8.018在linux上安装与配置过程
- excel 日期格式 mysql_EXCEL和MySQL日期格式之间的转换
- html异步 post,Jquery中Ajax/Post同步和异步请求