代理(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 ...
随机推荐
- 在Windows 8.1中安装必应输入法
鉴于目前Windows 8.1中自带的输入法存在一些Bug以及功能上的不完整性(比如,在Office 2013中删除掉错误的字符后快速输入第一个字母将丢失的问题:在QQ聊天窗口中文输入状态下快速输入省 ...
- shell 命令 --ps aux | grep
ps aux | grep 要查询的进程名 查询当前进程,如 ps aux | grep python 确认过需要查询的进程,就可以进行 kill -9 进程号等操作了.
- 11.js循环与函数
Switch语句 Switch(变量){ : 如果变量和1的值相同,执行该处代码 break; : 如果变量和2的值相同,执行该处代码 break; : 如果变量和3的值相同,执行该处代码 break ...
- PhantomJS快速入门-无界面浏览器
https://blog.csdn.net/libsyc/article/details/78199850 PhantomJS快速入门 本文简要介绍了PhantomJS的相关基础知识点,主要包括Pha ...
- [leetcode 14]Longest Common Prfix
1 题目: Write a function to find the longest common prefix string amongst an array of strings. Hide Ta ...
- Windwos下Tomcat的安装与配置
一.准备工作 1. JDK环境,可参考https://www.cnblogs.com/eagle6688/p/7873477.html 2. Eclipse 3. Tomcat安装包和源码包 二.下载 ...
- node-webkit学习(4)Native UI API 之window
node-webkit学习(4)Native UI API 之window 文/玄魂 目录 node-webkit学习(4)Native UI API 之window 前言 4.1 window a ...
- dbcp和druid(数据库连接池)
前言: 对于一个简单的数据库应用,由于对于数据库的访问不是很频繁.这时可以简单地在需要访问数据库时,就新创建一个连接,用完后就关闭它,这样做也不会带来什么明显的性能上的开销.但是对于一个复杂的数据库应 ...
- 浅谈getResource方法
项目经常会读取一些配置文件, 因此getResource方法便能够起到重要作用 使用时主要是两种方法, 一个是字节码文件Class类, 另一个是ClassLoader类加载器 使用Class类时有两种 ...
- docker部署consol 集群
拉取镜像 docker pull consul 启动节点1 docker run -d -e 'CONSUL_LOCAL_CONFIG={"skip_leave_on_interrupt&q ...