![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
文章平均质量分 87
gclhaha
对未来的恐惧
展开
-
设计模式之禅-桥梁模式
目录桥梁模式例子定义优点使用场景注意桥梁模式例子加入自己有两家公司,一家房地产公司只生产房子,一家山寨公司什么都可以生产。public abstract class Corp { private Product product; public Corp(Product product) { this.product = product; } public void makeMoney() { this.product.beProd原创 2021-04-08 18:10:07 · 120 阅读 · 0 评论 -
设计模式之禅-享元模式
享元模式例子报考系统。需要选择考试地点(选择框)、报考地点(选择框)、邮寄地址(输入框),还有其他信息。做一个很小的改动,增加了一个子类,实现带缓冲池的对象建立,同时在工厂类上增加 了一个容器对象HashMap,保存池中的所有对象。public class SignInfo { private String id; private String location; private String subject; private String postAddress;原创 2021-04-08 15:50:33 · 129 阅读 · 0 评论 -
设计模式之禅-解释器模式
解释器模式例子金融项目模型运算。计算加减,输入任意长度加减运算,计算结果。抽象类非常简单,仅一个方法interpreter负责对传递进来的参数和值进行解析和匹配,其中输入参数为HashMap类型,key值为模型中的参数,如a、b、c等,value为运算时取得的具体数字。public abstract class Expression { public abstract int interpreter(HashMap<String,Integer> var);}public原创 2021-04-07 14:27:08 · 82 阅读 · 0 评论 -
设计模式之禅-状态模式
状态模式例子电梯电梯有四种状态,开门、关门、运行、停止。看似实现很简单,但是电梯的这4个动作的执行都有前置条件,具体点说就是在特定状态下才能做特定事。电梯的四种特定状态敞门状态按了电梯上下按钮,电梯门开,这中间大概有10秒的时间,那就是敞门状态。在这个状态下电梯只能做的动作是关门动作。闭门状态电梯门关闭了,在这个状态下,可以进行的动作是:开门(我不想坐电梯了)、停止(忘记按路层号了)、运行。...原创 2021-04-06 16:04:17 · 186 阅读 · 0 评论 -
设计模式之禅-访问者模式
目录访问者模式例子定义优点缺点使用场景扩展统计功能多个访问者双分派最佳实践访问者模式例子员工信息,获取不同类型员工的信息。public interface IVisitor { void visit(CommonEmployee commonEmployee); void visit(Manager manager);}public class Visitor implements IVisitor { @Override public void visi原创 2021-03-08 18:07:16 · 162 阅读 · 0 评论 -
设计模式之禅-备忘录模式
目录备忘录模式例子定义应用使用场景注意事项扩展clone方式的备忘录多状态的备忘录模式多备份的备忘录封装得更好一点备忘录模式例子用月光宝盒追女生。备忘录public class Memento { private String state = ""; public Memento(String state) { this.state = state; } public String getState() { return sta原创 2021-02-25 11:32:40 · 147 阅读 · 1 评论 -
设计模式之禅-门面模式
目录门面模式例子定义优点缺点使用场景注意事项一个子系统可以有多个门面门面不参与子系统内的业务逻辑最佳实践门面模式例子写信寄信。只传递必要内容,具体执行顺序由邮局统一处理。通过在邮局内创建警察对邮件进行检查,完全隔离客户。public interface ILetterProcess { void writeContext(String context); void fillEnvelope(String address); void letterIntoEnvelope()原创 2021-02-24 15:03:03 · 99 阅读 · 0 评论 -
设计模式之禅-观察者模式
观察者模式例子韩非子和李斯。李斯监控韩非子,报信给秦王。public interface IHanFeiZi { void haveBreakfast(); void haveFun();}public interface Observable { void addObserver(Observer observer); void deleteObserver(Observer observer); void notifyObservers(String原创 2021-02-23 16:53:26 · 131 阅读 · 0 评论 -
设计模式之禅-组合模式
组合模式例子公司管理结构图。public class Corp { private String name = ""; private String position = ""; private int salary = 0; public Corp(String name, String position, int salary) { this.name = name; this.position = position;原创 2021-02-22 18:22:47 · 145 阅读 · 0 评论 -
设计模式之禅-迭代器模式
目录迭代器模式定义应用注意迭代器模式定义它提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节。Iterator抽象迭代器抽象迭代器负责定义访问和遍历元素的接口,而且基本上是有固定的3个方法:first()获得第一个元素,next()访问下一个元素,isDone()是否已经访问到底部(Java叫做hasNext()方法)。ConcreteIterator具体迭代器具体迭代器角色要实现迭代器接口,完成容器元素的遍历。Aggregate抽象容器容器角色负责提供创建具体迭代器原创 2021-02-22 10:42:11 · 84 阅读 · 0 评论 -
设计模式之禅-适配器模式
适配器模式例子项目对接第三方,数据格式不一致。本项目实体接口public interface IUserInfo { String getUserName(); String getMobileNumber(); String getHomeAddress(); String getOfficeTelNumber(); String getJobPosition(); String getHomeTelNumber();}实体实现publ原创 2021-02-20 17:59:31 · 105 阅读 · 0 评论 -
设计模式之禅-策略模式
目录策略模式例子定义优点缺点使用场景注意扩展策略模式例子诸葛亮锦囊妙计。public interface IStrategy { /** * 策略执行 */ void operate();}public class GivenGreenLight implements IStrategy{ @Override public void operate() { System.out.println("求吴国太开绿灯,放行!");原创 2021-02-19 14:04:30 · 106 阅读 · 0 评论 -
设计模式之禅-装饰模式
目录装饰模式例子定义优点缺点使用场景最佳实践装饰模式例子成绩单。想要家长给成绩单签字,但是自己考得不怎么样,就得先告诉点好听的。比如说自己的最高分,说自己成绩还是差,但排名提升了。通过不停的继承来增加装饰,嵌套层数会越来越多。在面向对象的设计中,如果超过两层继承,就应该想想是不是出设计问题了。成绩单抽象public abstract class SchoolReport { /** * 成绩情况 */ public abstract void repor原创 2021-02-18 15:04:36 · 86 阅读 · 0 评论 -
设计模式之禅-责任链模式
责任链模式例子中国古代对妇女制定了“三从四德”的道德规范,“三从”是指“未嫁从父、既嫁从夫、夫 死从子”。也就是说,一位女性在结婚之前要听从于父亲,结婚之后要听从于丈夫,如果丈夫死了还要听从于儿子。(我不喜欢这个例子,还好现代已经好多了)public interface IWomen { /** * 获得个人情况 * @return */ int getType(); /** * 获取个人请示 逛街 约会 看电影原创 2021-02-10 13:59:40 · 134 阅读 · 0 评论 -
设计模式之禅-命令模式
目录命令模式例子定义优点缺点使用场景扩展增加需求回滚完美的Command命令模式例子外包甲方项目。。刚开始,客户(也就是旅行社,甲方)很乐意和我们每个组探讨,比如和需求组讨论需求、和美工讨论页面、和代码组讨论实现,告诉他们修改、删除、增加各种内容等。这是一种比较 常见的甲乙方合作模式,甲方深入到乙方的项目开发中。public abstract class Group { /** * 甲乙双方分开办公,如果你要和某个组讨论,你首先要找到这个组 */ public原创 2021-02-09 18:13:44 · 170 阅读 · 0 评论 -
设计模式之禅-中介者模式
目录中介者模式例子定义优点缺点使用场景实际使用中介者模式例子定义Mediator 抽象中介者角色抽象中介者角色定义统一的接口,用于各同事角色之间的通信。Concrete Mediator 具体中介者角色具体中介者角色通过协调各同事角色实现协作行为,因此它必须依赖于各个同事角色。Colleague 同事角色每一个同事角色都知道中介者角色,而且与其他的同事角色通信的时候,一定要通过中介者角色协作。每个同事类的行为分为两种:一种是同事本身的行为,比如改变对象本身的状态,处理自己的行为等原创 2021-02-07 17:25:38 · 92 阅读 · 0 评论 -
设计模式之禅-原型模式
目录原型模式例子定义优点使用场景注意事项构造函数不会被执行深拷贝和浅拷贝浅拷贝深拷贝clone和final原型模式例子发送电子账单public class Mail implements Cloneable { /** * 收信人 */ private String receiver; /** * 邮件名称 */ private String subject; /** * 称谓 */ pri原创 2021-02-07 15:25:59 · 134 阅读 · 0 评论 -
设计模式之禅-代理模式
目录代理模式例子定义优点使用场景扩展普通代理强制代理代理的个性-增强动态代理代理模式例子public interface IGamePlayer { /** * 登录游戏 */ void login(String user, String password); /** * 杀怪,网络游戏的主要特色 */ void killBoss(); /** * 升级 */ void upgrade();原创 2021-02-05 15:57:08 · 122 阅读 · 0 评论 -
设计模式之禅-建造者模式
目录建造者模式例子定义优点使用场景注意事项建造者模式例子public abstract class CarModel { /**执行顺序*/ private ArrayList<String> sequence = new ArrayList<>(); /** 启动*/ protected abstract void start(); /**停车*/ protected abstract void stop(); /**鸣原创 2021-02-05 10:44:09 · 67 阅读 · 0 评论 -
设计模式之禅-模板方法模式
模板方法模式定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模板方法模式确实非常简单,仅仅使用了Java的继承机制,但它是一个应用非常广泛的模式。其中,AbstractClass叫做抽象模板,它的方法分为两类:基本方法。基本方法也叫做基本操作,是由子类实现的方法,并且在模板方法被调用。模板方法。可以有一个或几个,一般是一个具体方法,也就是一个框架,实现对基本方法的调度, 完成固定的逻辑。注意:为了防止恶意的操作,一般模板方原创 2021-02-04 17:59:09 · 84 阅读 · 0 评论 -
设计模式之禅-工厂模式
目录工厂方法模式优点使用场景工厂方法模式的扩展缩小为简单工厂模式升级为多个工厂类替代单例模式延迟初始化抽象工厂模式优点缺点使用场景注意事项工厂方法模式定义一个用于创建对象的 接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。/** * 抽象产品类 * * @author gcl * @date 2020-08-13 0:06 */public abstract class Product { // 产品类的公共方法 public void method原创 2021-02-04 15:31:06 · 114 阅读 · 0 评论 -
设计模式之禅-单例模式
目录单例模式优点缺点使用场景注意使用饿汉式避免对象复制单例模式优点由于单例模式在内存中只有一个实例,减少了内存开支,特别是一个对象需要频繁地 创建、销毁时,而且创建或销毁时性能又无法优化,单例模式的优势就非常明显。由于单例模式只生成一个实例,所以减少了系统的性能开销,当一个对象的产生需要比较多的资源时,如读取配置、产生其他依赖对象时,则可以通过在应用启动时直接产生一个单例对象,然后用永久驻留内存的方式来解决(在Java EE中采用单例模式时需要注意JVM 垃圾回收机制)。单例模式可以避免对资源的原创 2021-02-03 18:53:45 · 93 阅读 · 0 评论 -
设计模式之禅-六大原则
目录六大原则单一职责原则里氏替换原则依赖倒置原则接口隔离原则迪米特法则开闭原则六大原则单一职责原则单一职责原则的定义是:应该有且仅有一个原因引起类的变更。单一职责原则提出了一个编写程序的标准,用“职责”或“变化原因”来衡量接口或 类设计得是否优良,但是“职责”和“变化原因”都是不可度量的,因项目而异,因环境而异。对于单一职责原则,我的建议是接口一定要做到单一职责,类的设计尽量做到只有一个 原因引起变化。里氏替换原则所有引用基类的地方必须能透明地使用其子类的对象。通俗的讲,只要父类能出现的地方子原创 2021-02-03 18:12:33 · 98 阅读 · 0 评论