代理(Proxy)模式 ,桥梁(Bridge)模式
一:代理模式
1 根据名字我们就可以理解为:代替别人管理
2 什么情况下使用代理模式呢?
在软件系统中,有些对象有时候由于跨越网络或者其他的障碍,而不能够或者不想直接访问另一个对象,如果直接访问会给系统带来不必要的复杂性,这时候可以在客户程序和目标对象之间增加一层中间层,让代理对象来代替目标对象打点一切。
结构图:
3 我们一卖书为例:
package com.lovo.Proxy;
/**
*
* @author acer
*
*/
public interface IBook {
public void sailBook(); }
package com.lovo.Proxy;
/**
*
* @author acer
*
*/
public class RealSubject implements IBook { @Override
public void sailBook() {
System.out.println("卖书了");
} }
package com.lovo.Proxy;
/**
*
* @author acer
*
*/
public class MyProxy implements IBook {
private RealSubject realSubject; public MyProxy(RealSubject realSubject) {
super();
this.realSubject = realSubject;
} @Override
public void sailBook() {
realSubject.sailBook(); } }
package com.lovo.Proxy;
/**
*
* @author acer
*
*/
public class Test { public static void main(String[] args) {
MyProxy myProxy=new MyProxy(new RealSubject());
myProxy.sailBook(); } }
二:桥梁模式
主要的一句话就是 :将抽象部分与他的实现部分分离,使他们都可以独立的变化!现实指的是抽象类和他派生的类用来实现自己的对象!
我们来举个例子吧!
结构图:
比如:客户需要我们画出多种图形,并且可以用多种线条来画这些图形;
这里面变化的是图形,线条,那么我们就可以使用两个接口,让子类来实现这两个接!让子类来实现画出怎样的图像来!
首先我们写个画线条的接口:
package com.lovo.Bridge.two; public interface IDraw {
public void doDraw(); }
画图形接口:
package com.lovo.Bridge.two; public interface IShape {
public void myDraw(); }
各种图形的类:// 矩形 圆
package com.lovo.Bridge.two; public class Rectangular implements IShape {
private int width;
private int height;
private IDraw draw; public Rectangular(int width, int height, IDraw draw) {
super();
this.width = width;
this.height = height;
this.draw = draw;
} public int getWidth() {
return width;
} public void setWidth(int width) {
this.width = width;
} public int getHeight() {
return height;
} public void setHeight(int height) {
this.height = height;
} public IDraw getDraw() {
return draw;
} public void setDraw(IDraw draw) {
this.draw = draw;
} @Override
public void myDraw() {
System.out.println("画矩形:长:"+this.width+"高:"+this.height);
draw.doDraw(); } }
package com.lovo.Bridge.two; public class Round implements IShape{
private int r;
private int x;
private int y;
private IDraw draw; public Round(int r, int x, int y, IDraw draw) {
super();
this.r = r;
this.x = x;
this.y = y;
this.draw = draw;
} public int getR() {
return r;
} public void setR(int r) {
this.r = r;
} public int getX() {
return x;
} public void setX(int x) {
this.x = x;
} public int getY() {
return y;
} public void setY(int y) {
this.y = y;
} public IDraw getDraw() {
return draw;
} public void setDraw(IDraw draw) {
this.draw = draw;
} @Override
public void myDraw() {
System.out.println("画圆:半径:"+this.r +"圆心在("+this.x+","+this.y+")");
draw.doDraw(); } }
在写两个线条的类://实线 虚线
package com.lovo.Bridge.two; public class Dotted implements IDraw{ @Override
public void doDraw() {
System.out.println("画虚线");
} }
package com.lovo.Bridge.two; public class Solid implements IDraw{ @Override
public void doDraw() {
System.out.println("画实线");
} }
最后来个测试类:
package com.lovo.Bridge.two; public class Test { public static void main(String[] args) {
IDraw d=new Solid();
IShape s=new Rectangular(100, 50, d);
s.myDraw();
} }
对于这些设计模式 其实我自己也不太搞得清楚的,只是因为最近在学这个!算是做一些记录吧!
代理(Proxy)模式 ,桥梁(Bridge)模式的更多相关文章
- Java设计模式(6)桥模式(Bridge模式)
Bridge定义:将抽象和行为划分开来,各自独立,但能动态的结合. 为什么使用桥模式 通常,当一个抽象类或接口有多个具体实现(concrete subclass),这些concrete之间关系可能有以 ...
- 设计模式——桥接模式(Bridge模式)
基本介绍 桥接模式(Bridge模式):将实现与抽象放在两个不同的类层次中,使两层次可以独立改变 是一种结构型设计模式 说白了就是有多个维度的变化,这样的组合关系如果按照传统的方式会导致类爆炸,所以需 ...
- 设计模式之桥接模式(Bridge模式)
我想大家小时候都有用蜡笔画画的经历吧.红红绿绿的蜡笔一大盒,根据想象描绘出格式图样.而毛笔下的国画更是工笔写意,各展风采.而今天我们的故事从蜡笔与毛笔说起. 设想要绘制一幅图画,蓝天.白云.绿树.小鸟 ...
- Abstract Server模式,Adapter模式和Bridge模式
简易的台灯 Abstract Server模式 谁拥有接口. 接口属于它的客户,而不是它的派生类. 接口和客户之间的逻辑关系,强于接口和其派生类的逻辑关系. 逻辑关系和实体关系的强度是不一致的.在实体 ...
- (原创)composite模式和bridge模式是天生的好朋友
composite模式的意图是:将对象组合成树形结构以表示“部分-整体”的层次结构.composite使得用户对单个对象和组合对象的使用具有一致性.它的类图如下: composite模式的实现分为透明 ...
- 桥接模式(Bridge模式)
桥接模式的定义与特点 桥接(Bridge)模式的定义如下:将抽象与实现分离,使它们可以独立变化.它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度.通过上面的讲解,我们能很好 ...
- Android中Adapter和Bridge模式理解和应用
一 Adapter模式 意图: 将一个类的接口转换成客户希望的另外一个接口. Adapter模式使得原本由于接口不兼容而不能在一起工作的那些类可以在一起工作. 适用性: 使用一个已存在的类,而它的接口 ...
- PHP设计模式(八)桥接模式(Bridge For PHP)
一.概述 桥接模式:将两个原本不相关的类结合在一起,然后利用两个类中的方法和属性,输出一份新的结果. 二.案例 1.模拟毛笔(转) 需求:现在需要准备三种粗细(大中小),并且有五种颜色的比 如果使用蜡 ...
- Java设计模式(22)命令模式(Command模式)
Command模式是最让我疑惑的一个模式,我在阅读了很多代码后,才感觉隐约掌握其大概原理,我认为理解设计模式最主要是掌握起原理构造,这样才对自己实际编程有指导作用.Command模式实际上不是个很具体 ...
- Java设计模式(19)状态模式(State模式)
State的定义:不同的状态,不同的行为:或者说,每个状态有着相应的行为. 何时使用状态模式 State模式在实际使用中比较多,适合"状态的切换".因为我们经常会使用If else ...
随机推荐
- MySQL5.7的安装配置
双击进入安装,如下图: 2 点击上图红框“Install MySQL Products”进入安装界面,如下图: 3 根据上图当中第一步骤与第二步骤,进入下图: 4 进入设置界面,如下图: 5 在原来旧 ...
- vcpkg-微软开发的VC++打包工具
vcpkg-VC++打包工具 1. 介绍 VCPKG,是VC++ Packaging Tool. 是微软 C++ 团队开发的在 Windows 上运行的 C/C++ 项目包管理工具,可以帮助您在 Wi ...
- hive 函数 current_date()
current_date() 获取当天时间 select current_date() 结果是 实际操作中,这种写法只能获取日期是今天的数据,不适合数据重跑. 更合适的写法是 ,将日期作为外部参数传 ...
- HyperServer 中的 SSL 支持
HyperServer 中的 SSL 支持 DLL 模式不需要 SSL 配置, 因为 web 服务器 (如 IIS) 将承担 ssl 配置和 ssl 证书的责任. 对于独立和服务模式, ssl 配置是 ...
- 在.net中使用ETW事件的方法
直到.net4.5,才有了比较便利的操作ETW的方法. 本文介绍的方法主要来源于Microsoft.Diagnostics.Tracing.TraceEvent官方资料库. 准备 (1)需要用到类:M ...
- net 把指定 URI 的资源下载到本地
DirectoryInfo dir = new DirectoryInfo(AppContext.BaseDirectory); var path = dir.FullName + @"te ...
- EF查询返回DataTable
using (SchoolContext dbCOntext = new SchoolContext()) { string str = "select * from student&quo ...
- 文本框仅可接收decimal
文本框html如下: <div><label class="label">价格:</label><input id="TextP ...
- prometheus比zabbix好在哪点?
分享网易云轻舟微服务选择基于 Prometheus 开发微服务监控系统的考量: 开源 云原生 与微服务监控需求的匹配度很高 开源 Prometheus是CNCF(云原生计算基金会)旗下成熟的开源项目, ...
- MVVM双向绑定实现之Object.defineProperty
随着web应用的发展,直接操作dom的应用已渐行渐远,取而代之的是时下越来越流行的MVVM框架,dom操作几乎绝迹,这里面自然是框架底层封装的结果.MVVM框架的双向数据绑定使开发效率大大提高:然后在 ...