设计模式
tyrlee87
这个作者很懒,什么都没留下…
展开
-
设计模式总纲
1 六大原则1.1 单一职责原则单一职责原则就是指一个类或者模块应该有且只有一个改变的原因。1.2 里氏替换原则里氏替换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏替换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生...原创 2020-04-28 11:03:09 · 104 阅读 · 0 评论 -
享元模式
享元模式是一种比较简单的模式,其实就是一个有缓存的工厂。享元模式旨在减少重复对象的创建和销毁,减少内存使用,一般需要使用池的概念的时候就需要使用享元模式,比如常量池,线程池等。package flyWeight;public interface ICrayon { void draw(String name);}package flyWeight;public class Cr...原创 2020-04-28 10:28:12 · 82 阅读 · 0 评论 -
外观模式
外观模式是一种比较简单的模式,即使从来没听说过这种模式,也可能在实际工作中经常使用它。它旨在为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。比如X系统有ABC三个独立的接口,外部系统Y要求再开一个接口,需要以特定逻辑整合ABC的功能,并添加功能D,并且还需要屏蔽掉某些返回的字段,其实就是在使用facade模式。package facade...原创 2020-04-27 17:47:09 · 119 阅读 · 0 评论 -
组合模式
组合模式通过子类聚合父类,从而解决树形结构的整体-部分问题。典型的例子有公司架构体系,文件系统等。组合模式有两种类型:安全模式和透明模式。安全模式:Component中只保留最基础的功能,差异性功能都留到子类去实现。透明模式:Component中定义全部功能,叶子节点会冗余多余功能。安全模式:package composite.safeComposite;public abstra...原创 2020-04-27 15:33:22 · 104 阅读 · 0 评论 -
桥接模式
桥接模式用于有两个独立的互不相干的维度,而且每个维度都可以单独变化。最经典的模式就是蜡笔和颜色模型。本例以dota英雄以及其神符状态为例写了一个demo。当然也不使用桥接状态,直接给每个英雄都添加一个状态实现类,也能实现类似功能。如果这样实现的话,类的数量会极具增加,而且每新建一个新状态都需要给每一个英雄添加一个实现类,而每添加一个英雄也都要对每一个状态添加实现类,不易扩展和维护。如果再...原创 2020-04-27 11:24:14 · 148 阅读 · 0 评论 -
适配器模式
适配器模式一般用于接口转换,文中以英式中式插头转换为例创建demo。适配器模式分以下两种:对象适配器和类适配器对象适配器:以聚合方式实现package adapter;public interface EnglishPlug { void charge();}package adapter;public class EnglishPlugImpl implements E...原创 2020-04-26 17:58:49 · 129 阅读 · 0 评论 -
访问者模式
访问者模式是一种比较复杂且不常用的例子。访问者模式是为了解决稳定的数据结构和易变的操作耦合问题。一个类的结构很少改变,但经常需要在此类中定义新的操作。 在需要对这个类定义很多不同的并且不相关的操作,而且要避免让这些操作"污染"这个类,也不希望在增加新操作时修改这个类,就需要使用visitor pattern。提到访问者,一下就想起了看望病人的例子,这里就以探望病人为例写个demo,虽然简单,...原创 2020-04-26 16:18:04 · 117 阅读 · 0 评论 -
解释器模式
解释器模式一般用于不同语言的转换,在工作中使用较少。本例中以简单的java转sql示例演示。package interpreter;import java.util.HashMap;import java.util.Map;public class Context { private String tableName; Map<String,String> p...原创 2020-04-26 11:31:13 · 135 阅读 · 0 评论 -
备忘录模式
java:package memento;/** * 暗黑破坏神存档 */public class GameOriginer { int blood=100; int magic=100; String location="嗜血荒野"; String equipment="赤手,光脚"; public Memento storeGame() { retu...原创 2020-04-24 12:41:37 · 131 阅读 · 0 评论 -
状态模式
java:package state;public interface State { void attack(); void move();}package state;public class FirstGearState implements State{ @Override public void attack() { System.out.print...原创 2020-04-24 10:14:08 · 79 阅读 · 0 评论 -
观察者模式
java:package observer;public interface Observer { void update(int newPrice); }package observer;public class User1 implements Observer{ @Override public void update(int newPrice) { Sys...原创 2020-04-23 18:05:02 · 96 阅读 · 0 评论 -
迭代器模式
java:package iterator;public class Ninja { String name; String skill; //用于链表结构 Ninja next; public Ninja(String name, String skill) { super(); this.name = name; this.skill = skill...原创 2020-04-23 14:03:21 · 91 阅读 · 0 评论 -
策略模式
java:package strategy;public interface EquipmentStrategy { void produce();}package strategy;public class BattleFuryStrategy implements EquipmentStrategy{ @Override public void produce() {...原创 2020-04-22 17:33:25 · 97 阅读 · 0 评论 -
责任链模式
java:package chain;public class LeaveInfo { String name; int days; public LeaveInfo(String name, int days) { super(); this.name = name; this.days = days; } public String getName(...原创 2020-04-22 16:21:02 · 124 阅读 · 0 评论 -
命令模式
java:package command;public interface Appliance { void on(); void off();}package command;public class Light implements Appliance{ @Override public void on() { System.out.println("开...原创 2020-04-22 15:06:39 · 184 阅读 · 0 评论 -
中介者模式
java:package media;public class Media { User user1; User user2; User user3; public Media(User user1, User user2, User user3) { super(); this.user1 = user1; this.user2 = user2; this....原创 2020-04-22 10:43:56 · 94 阅读 · 0 评论 -
模板方法
java:package template;public abstract class CarTemplate { public abstract void installWheel(); public abstract void installEngine(); public abstract void paint(); public abstract void innerDe...原创 2020-04-21 18:08:40 · 100 阅读 · 0 评论 -
原型模式
java:package prototype;import java.util.List;public class ExamPaper implements Cloneable{ String subject; int maxScore; List<String> questions; public ExamPaper(String subject, int ...原创 2020-04-21 17:34:18 · 94 阅读 · 0 评论 -
建造者模式
java实现:package builder;public interface WheelFactory { void getWheel();}package builder;public class BenzWheelFactory implements WheelFactory{ @Override public void getWheel() { System.o...原创 2020-04-21 16:58:12 · 100 阅读 · 0 评论 -
代理模式
java实现:package proxy;public interface People { void speak();}package proxy;public class Chinese implements People{ @Override public void speak() { System.out.println("说中文"); }}packa...原创 2020-04-16 18:20:51 · 87 阅读 · 0 评论 -
装饰器模式
java实现:package decorator;public interface ICoffee { void makeCoffee();}package decorator;public class Coffee implements ICoffee{ @Override public void makeCoffee() { System.out.println("...原创 2020-04-16 18:08:43 · 84 阅读 · 0 评论 -
抽象工厂
java实现:package designMode.abstractFactory;public interface EngineFactory { void produceEngine();}package designMode.abstractFactory;public class BenzEngineFactory implements EngineFactory{...原创 2020-04-11 22:02:31 · 99 阅读 · 0 评论 -
工厂模式
java实现:简单工厂:package designMode.factory;import designMode.model.Benz;import designMode.model.Bmw;import designMode.model.Car;public class SimpleFactory { public static Car getCar(String br...原创 2020-04-11 21:11:07 · 91 阅读 · 0 评论 -
单例模式
单例模式欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计 ,将会带来全...原创 2020-04-11 13:54:33 · 93 阅读 · 0 评论