设计模式
香气袭人知骤暖
但行好事,莫问前程
展开
-
设计模式(十六):责任链模式
抽象处理者角色(Handler):定义出一个处理请求的接口。如果需要,接口可以定义 出一个方法以设定和返回对下家的引用。这个角色通常由一个Java抽象类或者Java接口实现。具体处理者角色(ConcreteHandler):具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。由于具体处理者持有对下家的引用,因此,如果需要,具体处理者可以访问下家。//抽象处理者public abstract class Handler { /** * 持有后继的责任对象原创 2020-08-16 22:49:46 · 71 阅读 · 0 评论 -
设计模式(十五):观察者模式
观察者模式中,一个被观察者管理所有相依于它的观察者物件,并且在本身的状态改变时主动发出通知。这通常通过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。//抽象观察者public interface Watcher{ public void update();}//观察者1public class Security implements Watcher{ @Override public void update() { Syst原创 2020-08-16 22:29:48 · 707 阅读 · 0 评论 -
设计模式(十四):模板方法模式
模式中的角色抽象类(AbstractClass):定义了算法的骨架。具体类(ConcreteClass):实现抽象类中的抽象方法,已完成完整的算法。//抽象模板类public abstract class AbstractPerson{ //抽象类定义整个流程骨架 public final void prepareGotoSchool(){ dressUp(); eatBreakfast(); takeThings(); }原创 2020-08-16 19:40:59 · 88 阅读 · 0 评论 -
设计模式(十三):策略模式
组成环境类(Context):用一个ConcreteStrategy对象来配置。维护一个对Strategy对象的引用。可定义一个接口来让Strategy访问它的数据。抽象策略类(Strategy):定义所有支持的算法的公共接口。 Context使用这个接口来调用某ConcreteStrategy定义的算法。具体策略类(ConcreteStrategy):以Strategy接口实现某具体算法。//抽象策略类public interface Strategy { public void op原创 2020-08-16 19:30:58 · 128 阅读 · 0 评论 -
设计模式(十二):组合模式(内部类)
当发现需求中是体现部分与整体层次结构时,以及你希望用户可以忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象时,就应该考虑组合模式。public class PayDemo { public abstract class Market { String name; public abstract void add(Market m); public abstract void remove(Market m); publi原创 2020-08-16 10:23:19 · 144 阅读 · 0 评论 -
设计模式(十一):门面模式(外观模式)
门面模式有两个角色:● 门面(Facade)角色 :客户端可以调用这个角色的方法。此角色知晓相关的(一个或者多个)子系统的功能和责任。在正常情况下,本角色会将所有从客户端发来的请求委派到相应的子系统去。● 子系统(SubSystem)角色 :可以同时有一个或者多个子系统。每个子系统都不是一个单独的类,而是一个类的集合(如上面的子系统就是由ModuleA、ModuleB、ModuleC三个类组合而成)。每个子系统都可以被客户端直接调用,或者被门面角色调用。子系统并不知道门面的存在,对于子系统而言,门面原创 2020-08-16 09:39:15 · 106 阅读 · 0 评论 -
设计模式(十):装饰者模式
静态代理和装饰者模式的区别:静态代理是一种编译期增强,还没运行就已经知道增强的目标对象。装饰者是运行时增强,只有运行时才知道具体增强的目标。//被装饰类接口public interface Human { public void wearClothes(); public void walkToWhere();}//具体被装饰类public class Person implements Human { @Override public void wearClo原创 2020-08-16 09:24:20 · 87 阅读 · 0 评论 -
设计模式(九):动态代理模式
给目标类生成一个代理类,用代理类来调用目标类的具体方法,并可以在调用前后给目标方法执行一些附加功能,最简单的应用就是Spring中的Aop,使用@Transactional注解可以在不写事务相关代码的情况下给方法增加事务0.抽象接口//租房public interface Rent { public void rent();}1.被代理类public class Host implements Rent { @Override public void rent() {原创 2020-08-11 21:15:06 · 100 阅读 · 0 评论 -
设计模式(八):静态代理模式
代理模式中有两类对象,一类是代理对象,一类是被代理对象。代理对象和被代理对象需要实现相同的接口(也就是说他们有相同的方法)这是实现代理模式的重中之重。代理对象中持有被代理对象的引用。可以通过构造函数或其他方法传递进来。代理对象中实际运行的方法是被代理对象的方法。0.抽象接口//租房public interface Rent { public void rent();}1.被代理类public class Host implements Rent { @Override原创 2020-08-11 20:09:07 · 95 阅读 · 0 评论 -
设计模式(七):桥接模式
桥接模式就像一座桥,可以连接两个维度的东西。桥接模式用一种巧妙的方式处理多层继承存在的问题,用抽象关联取代了传统的多层继承,将类之间的静态继承关系转换为动态的对象组合关系,使得系统更加灵活,并易于扩展,同时有效控制了系统中类的个数0.商标类接口public interface Brand { void info();}1.具体商标类-1public class Lenovo implements Brand { @Override public void info() {原创 2020-08-11 19:48:46 · 103 阅读 · 0 评论 -
设计模式(六):适配器模式
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。//1.已存在的、但不符合我们既有的标准接口的类public class Adaptee { public void request(){ System.out.println("连接网线上网"); }}//2.客户端类public class Computer { //电脑需要连接上转接头才可以上网 public void n原创 2020-08-10 23:12:24 · 103 阅读 · 0 评论 -
设计模式(五):原型模式
原型模式主要用于对象的复制,它的核心是原型类Prototype。该类需要具备以下两个条件:实现Cloneable接口。在java语言有一个Cloneable接口,它的作用只有一个,就是在运行时通知虚拟机可以安全地在实现了此接口的类上使用clone方法。在java虚拟机中,只有实现了这个接口的类才可以被拷贝,否则在运行时会抛出CloneNotSupportedException异常。重写Object类中的clone方法。Java中,所有类的父类都是Object类,Object类中有一个clone方法,作用原创 2020-08-10 16:41:26 · 164 阅读 · 0 评论 -
设计模式(四):建造者模式
建造者模式:将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。在这样的设计模式中,有以下几个角色:1、Builder:为创建一个产品对象的各个部件指定抽象接口。2、ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并提供一个检索产品的接口。3、Director:构造一个使用Builder接口的对象,指导构建过程。4、Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它原创 2020-08-09 21:56:26 · 130 阅读 · 0 评论 -
设计模式(三):抽象工厂模式
1.产品类###手机产品0.手机类抽象接口public interface IPhoneProduct { void start(); void shutdown(); void callup(); void sendSMS();}1.小米手机产品类public class xiaomiPhone implements IPhoneProduct { @Override public void start() { System.ou原创 2020-08-09 11:48:34 · 124 阅读 · 0 评论 -
设计模式(一):单例模式
一.饿汉式单例public class HungrySingleton { //类加载时就实例化 private final static HungrySingleton instance = new HungrySingleton(); private HungrySingleton(){ //System.out.println("执行了饿汉式单例的构造方法"); } public static HungrySingleton getInst原创 2020-08-08 23:31:08 · 74 阅读 · 0 评论 -
设计模式(二):简单工厂模式+工厂方法模式
简单工厂模式1.产品类0.抽象产品类public interface Car { void getname();}1.产品类1public class WuLing implements Car { @Override public void getname() { System.out.println("五菱宏光"); }}2.产品类2public class Tesla implements Car { @Override原创 2020-08-09 09:47:12 · 178 阅读 · 0 评论