设计模式
HQ麟
欢迎技术交流
github:https://github.com/HQlin
展开
-
设计模式六大原则
1、我们总是羡慕人家怎么牛,但我们又怎么知道人家背后付出多少! 2、参考:http://www.uml.org.cn/sjms/201211023.asp#1 3、精髓所在 ①单一职责原则告诉我们实现类要职责单一,实现单一功能即可。 ②里氏替换原则告诉我们不要破坏继承体系,即子类重写父类方法。 ③依赖倒置原则告诉我们要面向接口编程,类似于适配器。 ④接口隔离原则告诉我们在设计接口的时候要转载 2015-08-22 21:13:13 · 406 阅读 · 0 评论 -
构造型模式之(Factory Method)工厂方法模式
1.如果你期望推迟确定所需要实例化的类,可使用(Factory Method)工厂方法模式 2.举例//产品接口public interface IProduct { void one(); void setFactoryName(String string);}//产品Apublic class ProductA implements IProduct{ @Overr转载 2016-04-08 14:11:43 · 431 阅读 · 0 评论 -
操作型模式之Template Method(模板方法)模式
1.如果你期望在一个方法中实现一个算法,把算法中的某些步骤的定义推迟到子类中去重新定义,可使用Template Method(模板方法)模式 2.举例//算法框架抽象类public abstract class AbstractMethod { abstract void one(); abstract void twe(); void templateMethod(){转载 2016-04-08 22:05:38 · 253 阅读 · 0 评论 -
操作型模式之State(状态)模式
1.如果你期望各个类都实现一个操作,每个类代表一个不同的状态,可使用State(状态)模式 2.举例//状态抽象类public abstract class State { abstract void handle();}//状态A类public class StateA extends State{ @Override void handle() {转载 2016-04-08 23:32:38 · 406 阅读 · 0 评论 -
构造型模式之Prototype(原型)模式
1.如果你期望根据给定的例子创建一个对象,可使用Prototype(原型)模式 2.区分Shallow Clone&Deep Clone Shallow Clone: 对基本类型的成员变量进行值的复制,对引用类型的成员变量只复制引用,不复制引用的对象. Deep Clone: 对基本类型的成员变量进行值的复制,对引用类型的成员变量也进行引用对象的复制. 参考:http://blog.csdn原创 2016-04-08 17:11:58 · 288 阅读 · 0 评论 -
构造型模式之Memento(备忘录)模式
1.如果你期望根据只包含对象内部状态的休眠版本来重新构造对象,可使用Memento(备忘录)模式 2.方式:短暂备忘录、持久备忘录 3.举例//备忘录:短暂备忘public class Memento { private int num; public int getNum() { return num; } public void setNum(i转载 2016-04-08 21:23:22 · 294 阅读 · 0 评论 -
操作型模式之Strategy(策略)模式
1.如果你期望封装一个操作,使其实现可以互相替换,可使用Strategy(策略)模式 2.举例//策略抽象类public abstract class Strategy { abstract void doIt();}//策略A类public class StrategyA extends Strategy{ @Override void doIt() {转载 2016-04-09 12:42:43 · 362 阅读 · 0 评论 -
操作型模式之Command(命令)模式
1.如果你期望把方法调用封装在对象中,可使用Command(命令)模式 2.举例//命令接口public interface Command { void exe();}//命令抽象类:添加钩子功能public abstract class AbstractCommand implements Command{ abstract int hook();}//命令Apubl转载 2016-04-09 13:30:32 · 1951 阅读 · 0 评论 -
操作型模式之Interpreter(解释器)模式
1.如果你期望各个类都实现一个操作,对每种不同的组合结构使用不同的操作实现,可使用Interpreter(解释器)模式 2.举例//抽象表达式public abstract class Expression { abstract int interpret(Context context); public abstract String toString();}//int常数类原创 2016-04-09 16:09:51 · 342 阅读 · 0 评论 -
扩展型模式之Decorator(装饰器)模式
1.如果你期望允许开发者动态组合对象的行为,可使用Decorator(装饰器)模式 2.举例//人接口:Component角色public interface Person { void doSomethings();}//男人类:ConcreteComponent角色public class Man implements Person{ @Override publi原创 2016-04-09 17:15:36 · 346 阅读 · 0 评论 -
扩展型模式之Iterator(迭代器)模式
1.如果你期望提供顺序地访问集合元素的方法,可使用Iterator(迭代器)模式 2.举例//迭代器接口interface Iterator { Object next(); boolean hasNext();}//容器接口:装载集合元素public interface Collection { void add(Object obj); int size(转载 2016-04-09 20:11:57 · 274 阅读 · 0 评论 -
构造型模式之Abstract Factory(抽象工厂)模式
1.如果你期望构造一系列具有某个公共特性的对象,可使用Abstract Factory(抽象工厂)模式 2.举例(在工厂方法模式基础上添加和修改)//工厂抽象类public abstract class Factory { abstract <T> T createProduct(T t); abstract String getFactoryName();}//添加另外产品接原创 2016-04-08 15:56:45 · 346 阅读 · 0 评论 -
构造型模式之Builder(生成器)模式
1.如果你期望在构造对象之前逐步收集该对象与构造相关的信息,可使用Builder(生成器)模式 2.举例//Person.Builder嵌套类,自定义类型加载参数对象Person.Agepublic class Person { private final int id; private final String name; private final int age;转载 2016-04-08 13:32:15 · 277 阅读 · 0 评论 -
责任型模式之FLyweight(享元)模式
1.如果你期望将共享的细粒度对象的责任集中在一个对象,可使用FLyweight(享元)模式 2.举例//d单元抽象类public abstract class Flyweight{ public abstract void operation(); } //单元具体类public class WordFlyweight extends Flyweight{ priv转载 2016-04-08 12:23:54 · 215 阅读 · 0 评论 -
接口型模式之Bridge(桥接)模式
1.如果你期望将实现与抽象相分离以便二者独立演化,可使用Bridge(桥接)模式 2.举例//抽象平台public abstract class ImpLog { public abstract void execute(String msg);}//java平台实现类public class JImpLog extends ImpLog { public void ex转载 2016-04-06 16:16:07 · 4993 阅读 · 0 评论 -
责任型模式之Singleton(单例)模式
1.如果你期望将集中到某个类的单个实例中,可使用Singleton(单例)模式 2.写法:懒汉,饿汉,双重校验锁,枚举和静态内部类 3.举例://饿汉实现单例:不具有lazy loading效果,且线程安全public class Singleton { private static Singleton instance = new Singleton(); private转载 2016-04-06 20:56:30 · 194 阅读 · 0 评论 -
责任型模式之Observer(观察者)模式
1.如果你期望将得某个对象不必关心有哪些对象依赖自己,可使用Observer(观察者)模式 2.用法: 2.1被观察类需要继承Observable类,在数据改变的地方(如set***();)里加上setChanged(),在需要监听的地方使用notifyObservers(Object o)。 2.2观察者需实现Observer接口,对notifyObservers() 的提醒做出反应。 2转载 2016-04-07 11:17:49 · 341 阅读 · 0 评论 -
责任型模型之Mediator(中介者)模式
1.如果你期望将责任集中到某个类中,这个类可以监视其他对象的交互,可使用Mediator(中介者)模式 2.方式:标准中介者、广义中介者 3.举例(标准中介者)//中介者抽象类public interface Mediator { void change(Colleague colleague);}//同事类,所有具体同事类的父类public abstract class Coll转载 2016-04-07 14:19:25 · 356 阅读 · 0 评论 -
责任型模式之Proxy(代理)模式
1.如果你期望使得一个对象代表另一个对象进行各种操作,可使用Proxy(代理)模式 2.方式:一般代理、动态代理、远程代理 3.举例(一般代理)//人接口public interface Person { void doSomethings();}//具体女人类public class Woman implements Person{ @Override publi转载 2016-04-07 16:49:55 · 203 阅读 · 0 评论 -
责任型模式之Chain of Responsibility(责任链)模式
1.如果你期望能够允许一个请求沿着对象链不断向上提交,直到这个请求被某一级处理,可使用Chain of Responsibility模式 2.举例//抽象具体者实现处理方法,如果该具体类可处理则处理,否则传递给下个对象处理public abstract class Handler { private Handler successor; public Handler getSucc转载 2016-04-07 20:52:04 · 448 阅读 · 0 评论 -
接口型模式之Adapter(适配器)模式
1.如果你期望将类的外部接口适配客户期望的接口,可使用Adapter(适配器)模式。 2.类型:类适配器、对象适配器。 3.举例: 3.1uml模型 3.2源码//插座接口public interface Socket { public void hole(); }//已存在的一孔插口类public class OneSocket {public void oneHol转载 2016-04-06 01:34:41 · 815 阅读 · 0 评论 -
Eclipse使用AmaterasUML
1.官网:http://amateras.osdn.jp/cgi-bin/fswiki_en/wiki.cgi?page=AmaterasUML 2.AmaterasUML是Eclipse的UML插件,支持UMLactivity图,class图,sequence图,usecase图等;支持与Java class/interface之间的相互导入导出。 3.下载解压把所有jar文件放入Eclips转载 2016-04-12 10:53:21 · 1402 阅读 · 0 评论 -
接口型模式之Facade(外观)模式
1.如果你期望为一组类提供一个简单的接口,可使用Facade(外观)模式。 2.举例: 2.1uml模型 2.2源码//模拟第一个操作:打开第一个抽屉public class DrawerOne { public void open(){ System.out.println("第一个抽屉被打开了"); getKey(); }转载 2016-04-06 13:46:14 · 3012 阅读 · 0 评论 -
接口型模式之Composite(组合)模式
1.如果你期望为单个对象和群组对象定义共同的接口,可使用Composite(组合)模式 2.举例: 2.1uml模型 2.2源码//抽象节点public abstract class Company { private String name; public Company(String name) { this.name = name;转载 2016-04-06 15:09:58 · 1093 阅读 · 0 评论 -
扩展型模式之Visitor(访问者)模式
1.如果你期望允许开发者定义新操作,而无需更改类层次,可使用Visitor(访问者)模式 2.举例//访问者接口interface IVisitor { void visit(Node node);}//节点抽象类abstract class Node { abstract void accept(IVisitor iVisitor); abstract void d转载 2016-04-09 22:27:23 · 468 阅读 · 0 评论