设计模式之读写装饰

今天有人问我如下代码:

1 public class UserInformation
2     {
3         public string Name { get; set; }
4
5         public uint Age { get; internal set; }
6     }

UserInformation.Age 这个代码在A程序集里面可以,但是在B程序集里面却无法使用了,如何解决?

其实这个问题本质跟设计模式有关系,internal 在C#中是程序集内可访问的修饰符.

因此我想到了第一种方案:

 1 public class UserInformation
 2     {
 3         public string Name { get; internal set; }
 4
 5         public uint Age { get; set; }
 6
 7         public void SetName(string name)
 8         {
 9             Name = name;
10         }
11     }

有点儿Java的风格,并不喜欢。考虑了第二中方案:

 
 1 public interface IInformation
 2     {
 3         string Name { get; }
 4
 5         uint Age { get; }
 6     }
 7
 8     public interface IMutableInformation : IInformation
 9     {
10         new string Name { set; }
11
12         new uint Age { set; }
13     }

那么,实体类的实现如下:

 1  public class UserInformation : IInformation , IMutableInformation
 2     {
 3         private string _Name = string.Empty;
 4         private uint _Age = default(uint);
 5
 6         public string Name { get { return _Name; } }
 7
 8         public uint Age { get { return _Age; } }
 9
10         string IMutableInformation.Name
11         {
12             set { _Name = value; }
13         }
14
15         uint IMutableInformation.Age
16         {
17             set { _Age = value; }
18         }
19     }

下面,我就开始调用它了:

 1  class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5
 6             A.UserInformation information = new A.UserInformation();
 7             A.IMutableInformation mutableInformation = information;
 8             mutableInformation.Name = "张三丰";
 9             mutableInformation.Age = 102;
10
11             Console.WriteLine(information.Name);
12             Console.WriteLine(information.Age);
13
14             // information.Name = "张三丰"; // 这样,此处编译的时候会出错,你需要用【IMutableInformation】接口 给【A.UserInformation】赋值.
15
16             Console.ReadLine();
17         }
18     }

就介绍到这里了....

时间: 2024-08-08 20:49:29

设计模式之读写装饰的相关文章

设计模式C++实现——装饰者模式

模式定义: 装饰者模式动态地将责任附加到对象上.若要扩展功能,装饰者提供了比继承更有弹性的替代方案. 装饰者和被装饰者有相同的超累类型. 可以用一个或多个装饰者包装一个对象. 既然装饰者和被装饰者对象有相同的超累类型,所以在任何需要原始对象(被包装的)的场合,可以用装饰过的对象代替它. 装饰者可以委托被装饰者的行为之前与或之后,加上自己的行为,以达到特定的目的. 对象可以在任何时候被装饰,所以可以在运行时动态地.不限量地用你喜欢的装饰者来装饰对象. 模式结构: 举例: 购买咖啡时,可以在其中加入

设计模式之:装饰设计模式

装饰设计模式 装饰设计模式概述 装饰模式就是使用被装饰类的一个子类的实例,在客户端将这个子类的实例交给装饰类.是继承的替代方案.装饰模式可以任意组合. 优点 使用装饰模式,可以提供比继承更灵活的扩展对象的功能,它可以动态的添加对象的功能,并且可以随意的组合这些功能 缺点 正因为可以随意组合,所以就可能出现一些不合理的逻辑 装饰设计模式图解: 例子1: public interfacePhone { public abstract void call(); } public classIPhone

设计模式篇——初探装饰器模式

文章目录 1.装饰器模式介绍 2.装饰器模式类图 3.装饰器模式Demo实现(一个小镇的拉面馆) 4.装饰器模式总结 装饰器模式介绍:装饰器模式可以在不修改任何底层代码的情况下,给对象赋予新的职责(程序运行时的扩展,动态的将责任附加到对象上).属于结构型设计模式. 类图: 我们来看下装饰器模式的类图: 一个简单的Demo(故乡小镇的一个面馆): 在故乡的一个小镇上面,有一家面馆,主营拉面.在这里你可以只点清汤面(SoupNoodle),也可以往里面加佐料,佐料有牛肉(Beef),鱼丸(FishB

javascript设计模式学习之——装饰者模式

一.装饰者模式定义 装饰者模式可以动态地给某个对象添加一些额外的职责,而不会影响从这个类中派生的其他对象.这种为对象动态添加职责的方式就称为装饰者模式.装饰者对象和它所装饰的对象拥有一致的接口,对于用户来说是透明的. 和java等语言不同的是,java的装饰器模式是给对象动态添加职责,javascript中,给对象添加职责的能力是与生俱来的,更侧重于给函数动态添加职责. 二.java中的装饰者模式实现 package com.bobo.shejimoshi.derector; public cl

【设计模式】之装饰器模式

为什么会有装饰模式? 装饰模式是为了解决继承强依赖性和出现大量子类不方便管理问题而出现的.   1. 概述 动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更灵活. 原理:增加一个修饰类包裹原来的类,包裹的方式一般是通过在将原来的对象作为修饰类的构造函数的参数.装饰类实现新的功能,但是,在不需要用到新功能的地方,它可以直接调用原来的类中的方法.修饰类必须和原来的类有相同的接口. 2. 模式中的角色 2.1 抽象构建(Component):定义一个抽象接口,用以给这些对象动态

设计模式之(Decorator)装饰者模式

1.需求 设计一个计算一块手机价格的程序,不同的存储容量(16GB和32GB)价格不同,不同的颜色(白色和黑色)价格不同,不同的网络制式(联通和电信)价格不同.当用户选定好配置后,程序计算其价格. 2.分析 考虑到未来存储容量可能升级到64GB,网络制式可能增加移动或者其他运营商,颜色可能增加更多的颜色,所以我们需要一种弹性的设计,可以自由添加存储容量,颜色和制式,同时程序不需要做太大改动.我们需要隔离程序可变部分和不可变部分,可变部分是配置,不可变部分是计算价格的过程,下面我们用装饰者模式来实

JAVA设计模式初探之装饰者模式

定义:动态给一个对象添加一些额外的职责,就象在墙上刷油漆.使用Decorator模式相比用生成子类方式达到功能的扩充显得更为灵活.设计初衷:通常可以使用继承来实现功能的拓展,如果这些需要拓展的功能的种类很繁多,那么势必生成很多子类,增加系统的复杂性,同时,使用继承实现功能拓展,我们必须可预见这些拓展功能,这些功能是编译时就确定了,是静态的. 要点: 装饰者与被装饰者拥有共同的超类,继承的目的是继承类型,而不是行为 实际上Java 的I/O API就是使用Decorator实现的. //定义被装饰

设计模式入门之装饰器模式Decorator

//装饰模式定义:动态地给一个对象加入一些额外的职责. //就添加功能来说.装饰模式比生成子类更为灵活 //这也提现了面向对象设计中的一条基本原则,即:尽量使用对象组合,而不是对象继承 //Component:组件对象的接口.能够给这些对象动态加入职责 //ConcreateComponet:详细的组件对象.实现组件对象接口.通常就是被装饰器装饰的对象.也就是能够给这个对象加入职责 //Decorator:全部装饰器的抽象父类,须要定义一个与组件接口一致的接口,并持有一个Component对象,

设计模式三之装饰者模式1

装饰者模式,真是越来越生活化了,其实设计不就是源于生活高于生活吗?人类,一般总是把生活中观察的东西作为原料才能抽象出东西.装饰者模式,就是用各种装饰者对象来给被装饰者装饰,达到人们的多种多样的需求.不举咖啡的例子,实在没喝过几杯正式的咖啡.考虑炒饭,主要的原材料就是饭,但是变种非常多,近几天我就吃过和有深印象的,扬州炒饭.生牛肉炒饭.五香肉丁炒饭.XO酱海鲜炒饭.黄金炒饭.蛋炒饭等,像什么牛肉.葱花.肉丁.鸡蛋就是装饰者了,厨师用他们炒出(装饰出)各种饭.这种模式的优点是可以订制各种各样的需求,