zoukankan      html  css  js  c++  java
  • 桥接模式

    模式定义

    桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。
    当一个对象由多个对象组合而成,使用桥接模式能减少类数量。

    UML类图

    • 抽象类(Abstraction) 定义一个成员变量(实现类接口类型) 和赋值方法
    • 扩展抽象类(Refined Abstraction) 实现了在抽象类中定义的抽象业务方法,在扩充抽象类中可以调用 在实现类接口中定义的业务方法
    • 实现类接口(Implementor) 实现部分的基本操作接口
    • 具体实现类(Concrete Implement) 实现了实现类接口

    代码结果

    public static class BridgeApp
    	{
    		public static void Run()
    		{
    			Abstraction ab = new RefinedAbstraction();
    
    			ab.Implementor = new ConcreteImplementorA();
    			ab.Operation();
    		}
    	}
    	public class Abstraction
    	{
    		protected Implementor implementor;
    
    		public Implementor Implementor
    		{
    			set { implementor = value; }
    		}
    
    		public virtual void Operation()
    		{
    			implementor.Operation();
    		}
    	}
    	public interface Implementor
    	{
    		void Operation();
    	}
    	public class RefinedAbstraction : Abstraction
    	{
    		public override void Operation()
    		{
    			implementor.Operation();
    		}
    	}
    	public class ConcreteImplementorA : Implementor
    	{
    		public void Operation()
    		{
    			Console.WriteLine("ConcreteImplementorA Operation");
    		}
    	}
    	public class ConcreteImplementorB : Implementor
    	{
    		public void Operation()
    		{
    			Console.WriteLine("ConcreteImplementorB Operation");
    		}
    	}
    

    情景模式

    现在智能手机品牌越来越多了,其实大家都明白好的手机都是那不同的部件组装下。这里假设手机主要CPU和内存。哈哈只需要修改CPU与内存就可以生产不同类型的手机

    public static class BridgeApp
    	{
    		public static void Run()
    		{
    			PhoneOne phone1 = new PhoneOne();
    			phone1.Display();
    
    			PhoneTwo phone2 = new PhoneTwo();
    			phone2.Display();
    		}
    	}
    	public class PhoneOne
    	{
    		private CPU _cpu = new HPCPU();
    		private RAM _ram = new RAM128();
    
    		public void Display()
    		{
    			Console.WriteLine("Phone one:");
    			_cpu.Display();
    			_ram.Display();
    			Console.WriteLine("------------------------------------------");
    		}
    	}
    	public class PhoneTwo
    	{
    		private CPU _cpu = new HPCPU();
    		private RAM _ram = new RAM64();
    
    		public void Display()
    		{
    			Console.WriteLine("Phone two:");
    			_cpu.Display();
    			_ram.Display();
    			Console.WriteLine("------------------------------------------");
    		}
    	}
    	public abstract class CPU
    	{
    		public abstract void Display();
    	}
    	public abstract class RAM
    	{
    		public abstract void Display();
    	}
    	public class RAM64 : RAM
    	{
    		public override void Display()
    		{
    			Console.WriteLine("RMS size is 64");
    		}
    	}
    	public class RAM128 : RAM
    	{
    		public override void Display()
    		{
    			Console.WriteLine("RMS size is 128");
    		}
    	}
    	public class LestinaCPU : CPU
    	{
    		public override void Display()
    		{
    			Console.WriteLine("CPU Type is LestinaCPU");
    		}
    	}
    	public class HPCPU : CPU
    	{
    		public override void Display()
    		{
    			Console.WriteLine("CPU Type is HPCPU");
    		}
    	}
    
  • 相关阅读:
    WF4.0 自定义CodeActivity与Bookmark<第三篇>
    WF4 常用类<第二篇>
    WF4.0 Activities<第一篇>
    WWF3常用类 <第十一篇>
    WWF3XOML方式创建和启动工作流 <第十篇>
    element-ui表格显示html格式
    tail -f 加过滤功能
    vue 遇到防盗链 img显示不出来
    python No module named 'urlparse'
    grep awk 查看nginx日志中所有访问的ip并 去重
  • 原文地址:https://www.cnblogs.com/LoveTomato/p/8360989.html
Copyright © 2011-2022 走看看