代理(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 ...
随机推荐
- 服务化实战之 dubbo、dubbox、motan、thrift、grpc等RPC框架比较及选型
转自: http://blog.csdn.net/liubenlong007/article/details/54692241 概述 前段时间项目要做服务化,所以我比较了现在流行的几大RPC框架的优缺 ...
- Hdu1151 Air Raid(最小覆盖路径)
Air Raid Problem Description Consider a town where all the streets are one-way and each street leads ...
- Eclipse tomcat配置 未在Eclipse中添加.jar包出错
JavaWeb: 报错信息The superclass "javax.servlet.http.HttpServlet" was not found on the Java Bui ...
- 重写TreeView,自定义图标,生成通行的下划线,取消默认获得焦点失去焦点的效果,并支持拖拽节点到外界
1.运行效果: 2.前端代码 <UserControl x:Class="iPIS.UI.Base.Tree.VideoTreeControl" xmlns="ht ...
- 第二节:创建模型,使用Code First,配置映射关系
这一节,实现模型的创建,配置映射关系 使用Code First数据迁移. 创建模型 一,首先创建几个接口:实体接口,聚合根接口,值对象接口 1,实体接口: 2,聚合根接口: 3,值对象接口: 二,模型 ...
- 也来谈一谈js的浅复制和深复制
1.浅复制VS深复制 本文中的复制也可以称为拷贝,在本文中认为复制和拷贝是相同的意思.另外,本文只讨论js中复杂数据类型的复制问题(Object,Array等),不讨论基本数据类型(null,unde ...
- 配置文件springmvc.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- [转载]java开发中的23种设计模式
原文链接:http://blog.csdn.net/zhangerqing 设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反 ...
- Linux巩固记录(2) java项目的编译和执行
由于要近期使用hadoop等进行相关任务执行,操作linux时候就多了 以前只在linux上配置J2EE项目执行环境,无非配置下jdk,部署tomcat,再通过docker或者jenkins自动部署上 ...
- js基于json的级联下拉框
级联下拉列表是项目中常用到的.比如省市县,比如企业性质等,做成一个js通用组件, 在静态页出来后可以直接插入,将数据和html静态页做一个解耦. 贴出来抛砖引玉吧. /** * @author sun ...