设计模式-之结构模式

一:结构型模式总结全图:

二:详细解析:

  1. (Adapter)适配器模式图

Adapter适配器模式:创建一个接口去使用现成的不兼容的接口的类,主要应用是对系统维护添加新功能时。

使用过程:给要使用的对象提供一个访问接口,使得目标对象功能整合到系统中。

生活实例:简单典型的就是电脑笔记本电源

2. Proxy代理模式

Proxy代理模式:用代理对象来控制对原有对象的引用,其接口不可以改变。

3. Decorator装饰模式图

 

 

public class Test

{

public static void main(String[] args)

{

ErrorLog errorLog = new ErrorLog();

DecorateLog errorLogAbove = new DecorateLog(errorLog);

System.out.println("errorLogAbove:");

errorLogAbove.printMessage();

DubugLog dubugLog = new DubugLog();

DecorateLog dubugLogAbove = new DecorateLog(errorLogAbove, dubugLog);

System.out.println("dubugLogAbove:");

dubugLogAbove.printMessage();

InforLog inforLog = new InforLog();

DecorateLog inforLogAbove = new DecorateLog(dubugLogAbove, inforLog);

System.out.println("inforLogAbove:");

inforLogAbove.printMessage();

}

}

abstract class Log

{

public abstract void printMessage();

}

class DecorateLog extends Log

{

Log log1;

Log log2;

public DecorateLog()

{

}

public DecorateLog(Log log1)

{

this.log1 = log1;

}

public DecorateLog(Log log1, Log log2)

{

this.log1 = log1;

this.log2 = log2;

}

public void printMessage()

{

if (null != log1)

log1.printMessage();

if (null != log2)

log2.printMessage();

}

}

class ErrorLog extends Log

{

public void printMessage()

{

System.out.println("Error Information");

}

}

class DubugLog extends Log

{

public void printMessage()

{

System.out.println("DubugLog Information");

}

}

class InforLog extends Log

{

public void printMessage()

{

System.out.println("InforLog Information");

}

}

Decorator装饰模式:为目标对象动态添加一些新的操作和功能。

4.外观模式图

Facade外观模式:对系统屏蔽子系统的组件,降低客户端和系统内部的耦合。

生活实例:发短信查话费。项目中应用为数据库方面。(DataUtil类的实现就是Facade)

5.桥接模式图

Bridge桥接模式:将系统的抽象与实现分离,有利于分层架构的实现。减少因变化带来的代码修改。

package com.test.Bridge;

public class Test

{

public static void main(String[] args)

{

AbstractRoad Road1 = new SpeedWay();

Road1.car = new Car();

Road1.Run();

}

}

abstract class AbstractCar

{

public abstract void Run();

}

class Car extends AbstractCar

{

public void Run()

{

System.out.println("小汽车在");

}

}

class Bus extends AbstractCar

{

public void Run()

{

System.out.println("公共汽车在");

}

}

abstract class AbstractRoad

{

AbstractCar car;

public abstract void Run();

}

class SpeedWay extends AbstractRoad

{

public void Run()

{

car.Run();

System.out.println("高速公路上行驶");

}

}

class Street extends AbstractRoad

{

public void Run()

{

car.Run();

System.out.println("市区街道上行驶");

}

}

生活实例:设备开关

6.组合模式图

Composite组合模式:使得用户对对象使用具有一致性

在结构上和decorate很想,通常情况两种模式是一起实现的

package com.test.Composite;

import sun.reflect.generics.reflectiveObjects.NotImplementedException;

import java.util.*;

public class Test

{

public static void main(String[] args)

{

// 构造根节点

Composite rootComponent = new Composite("root");

// 添加两个叶子几点,也就是子部件

Leaf leaf1 = new Leaf("leaf1");

Leaf leaf2 = new Leaf("leaf2");

rootComponent.add(leaf1);

rootComponent.add(leaf2);

// 遍历组合部件

rootComponent.eachChild();

}

}

abstract class Component

{

String name;

public String getName()

{

return name;

}

public void setName(String name)

{

this.name = name;

}

// 添加部件

public abstract void add(Component component);

// 删除部件

public abstract void remove(Component component);

// 遍历所有子部件

public abstract void eachChild();

}

class Leaf extends Component

{

public Leaf()

{

}

public Leaf(String name)

{

this.name = name;

}

// 叶子节点不具备添加的能力,所以不实现

public void add(Component component)

{

throw new NotImplementedException();

}

// 叶子节点不具备添加的能力必然也不能删除

public void remove(Component component)

{

throw new NotImplementedException();

}

// 叶子节点没有子节点所以显示自己的执行结果

public void eachChild()

{

String str = String.format(name+"执行了..");

System.out.println(str);

}

}

class Composite extends Component

{

public Composite()

{

}

public Composite(String name)

{

this.name = name;

}

// 用来保存组合的部件

List<Component> myList = new ArrayList<Component>();

// 添加节点 添加部件

public void add(Component component)

{

myList.add(component);

}

// 删除节点 删除部件

public void remove(Component component)

{

myList.remove(component);

}

// 遍历子节点

public void eachChild()

{

String str = String.format(name+"执行了..");

System.out.println(str);

for (Component c : myList)

{

c.eachChild();

}

}

}

7.享元模式

享元模式:运用共享技术有效的支持大量细粒度的对象

时间: 2024-11-09 02:41:55

设计模式-之结构模式的相关文章

设计模式之结构模式

1. 适配器模式 1)类的适配器模式 2)对象的适配器模式 3) 接口的适配器模式 接口的适配器是这样的:有时我们写的一个接口中有多个抽象方法,当我们写该接口的实现类时,必须实现该接口的所有方法,这明显有时比较浪费,因为并不是所有的方法都是我们需要的,有时只需要某一些,此处为了解决这个问题,我们引入了接口的适配器模式,借助于一个抽象类,该抽象类实现了该接口,实现了所有的方法,而我们不和原始的接口打交道,只和该抽象类取得联系,所以我们写一个类,继承该抽象类,重写我们需要的方法就行了. 2. 装饰模

[JAVA设计模式]第三部分:结构模式

声明:原创作品,转载时请注明文章来自SAP师太博客,并以超链接形式标明文章原始出处,否则将追究法律责任! 结构模式... 52 适配(Adapter)器模式... 52 类适配器模式结构... 52 对象适配器结构... 53 从Iterator到Enumeration的适配... 54 从Enumeration到Iterator的适配... 54 缺省适配(Default Adapter)器模式... 55 模式结构... 56 与适配器模式区别... 56 J2EE中的缺省适配模式... 5

设计模式大类--结构模式(上)

大概有7中结构模式,分为上下两篇.一.Adapter(适配器)描述:将两个不兼容的类结合一起使用,一般需要用到其中某个类的若干方法好处:在两个类直接创建一个混合接口,而不必修改类里面的其他代码 例子:假设我们要打桩,有两种类:方形桩 圆形桩.public class SquarePeg{ public void insert(String str){ System.out.println("SquarePeg insert():"+str); } } public class Roun

【我的《冒号课堂》学习笔记】设计模式(2)结构模式

结构模式 暂无 总结:

[工作中的设计模式]享元模式模式FlyWeight

一.模式解析 Flyweight在拳击比赛中指最轻量级,即“蝇量级”或“雨量级”,这里选择使用“享元模式”的意译,是因为这样更能反映模式的用意.享元模式是对象的结构模式.享元模式以共享的方式高效地支持大量的细粒度对象. 享元模式:主要为了在创建对象时,对共有对象以缓存的方式进行保存,对外部对象进行单独创建 模式要点: 1.享元模式中的对象分为两部分:共性部分和个性化部分,共性部分就是每个对象都一致的或者多个对象可以共享的部分,个性化部分指差异比较大,每个类均不同的部分 2.共性部分的抽象就是此模

设计模式-抽象工厂模式(C#)

设计模式--抽象工厂模式(JAVA) 在抽象工厂模式中,一个具体工厂可以生产一组相关的具体产品,这样的一组产品成为产品族,产品族中的每一个产品都属于某一个产品继承等等级结构.当系统所提供的工厂生产的具体产品并不是一个简单的对象,而是多个位于不同产品等级结构.属于不同类型的具体产品时就可以使用抽象工厂模式. 抽象工厂模式与工厂方法模式最大的区别在于,工厂方法模式针对的是一个产品等级结构,而抽象工厂模式需要面对多个产品等级结构,一个工厂等级结构可以负责多个不同产品等级结构中的产品对象的创建,当一个工

【设计模式】迭代器模式

迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式.这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示. 迭代器模式属于行为型模式. 介绍 意图:提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示. 主要解决:不同的方式来遍历整个整合对象. 何时使用:遍历一个聚合对象. 如何解决:把在元素之间游走的责任交给迭代器,而不是聚合对象. 关键代码:定义接口:hasNext, next. 应用实例:JAVA 中的

设计模式之组合模式

当需求中是体现部分与整体层次的结构时,以及你希望忽略组合对象与单个对象的不同,统一的使用组合结构中的所有对象时,就应该考虑使用组合模式了.例如:我们单个复制一个文件和多个复制文件,对我们而言,并不在乎一个文件的复制与多个文件复制的区别,也就是我们的操作是一样的. 下面的代码是建立一个公司的组织结构,其中各个部分,不管是分公司还是部门,都拥有一套相同的功能操作. 代码如下: using System; using System.Collections.Generic; using System.L

【设计模式】——模板方法模式

模板方法模式,定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定的步骤.当我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑用模板方法模式来处理. AbstractClas是抽象类,其实也就是一抽象模板,定义并实现了一个模板方法.这个模板方法一般是一个具体方法,它给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现.顶级逻辑也有可能调用一些具体