装饰设计模式(C#)求知,请前辈们指点,万分感谢
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了装饰设计模式(C#)求知,请前辈们指点,万分感谢相关的知识,希望对你有一定的参考价值。
public interface component
void sampleoperation();
public class decorator : component
private component component;
public decorator(component component)
this.component=component;
public virtual void sampleoperation()
component.sampleoperation();
public class concretecomponent : component
public void sampleoperation()
console.writeline ("concretecomponent sampleoperation");
public class concretedecorator1 : decorator
public concretedecorator1(component component):base(component)
override public void sampleoperation()
base.sampleoperation ();
console.writeline ("concretedecorator1 sampleoperation");
public class concretedecorator2 : decorator
public concretedecorator2 (component component):base(component)
override public void sampleoperation()
base.sampleoperation ();
console.writeline ("concretedecorator2 sampleoperation");
static void main(string[] args)
component component=new concretecomponent ();
component concretedecorator1=new concretedecorator1 (component);
component concretedecorator2=new concretedecorator2 (concretedecorator1);
concretedecorator2.sampleoperation ();
以上的程序是装饰设计模式的简单代码,熟悉设计模式的人可能都是小儿科了,我就是太笨了,看了好久也没研究明白,知道怎么用了,但是还是不太懂什么时候用!在在这里我请教高手2个问题,有路过的希望能指点迷津,让我也学会这个模式!
问题1:component component=new concretecomponent ();
component concretedecorator1=new concretedecorator1 (component);
component concretedecorator2=new concretedecorator2 (concretedecorator1);
这个过程是怎么回事?decorator类里有了包含了一个component对象这个就的包装了,有经验的前辈如果有时间能不能给我指点一下,最好是个推导的过程
问题2:每一个sampleoperation都包含一个base.sampleoperation ();最后还装饰完就只调用一次而已,也就是执行一次base.sampleoperation ()动作,这个是怎么做到的!
===就是以上两个问题,肯能是我第一个问题没弄明白,第二个也搞不懂,现在我是能用这个模式了,但是还是没彻底的从原理上搞明白,我这个人从小就笨,别人很容易弄懂的东西我得弄好久!我提的问题可能让前辈们感觉很好笑,因为我是个初学者刚刚开始看着方面的东西,我也比较好转牛角尖,我就15分,都给帮助我的前辈,请不要嫌少!万分感谢!
装饰模式可以理解为穿衣服,“人”在那里摆着,怎么穿衣服,什么顺序穿衣服,都算是一种“装饰”,如果你要上班,先穿内裤后穿西服。如果你是超人,先穿西服后穿内裤。
换句话说,什么顺序都可以,由你自定义来“装饰”,而并不依赖于你的“人”
只是一个理解思路,希望对你有帮助吧 参考技术A 简单给你说下装饰者模式吧,希望对你理解有帮助.
装饰者模式主要是通过继承来扩展新的行为.
首先它分为装饰者和被装饰者,比如说计算方法调用的次数,事例如下:
public interface jiekou
int Number();
public class beizhuangshizhe:jiekou
public int Number()
return 1;///很显然被装饰者无法实现计算
public class zhuangshizhe:jiekou
jiekou jk;///把被装饰者做参数
public zhuangshizhe(jiekou beizhuangshizhe)
this.jk=beizhuangshizhe;
public int Number()
return jk.Number()+1;///通过装饰者实现计算
static void main(string[] args)
jiekou jk=new beizhuangshizhe();///他们继承同一接口,可以通过接口调用
jk=new zhuangshizhe(jk);
jk=new zhuangshuzhe(jk);///装饰者也可以做被装饰者
jk.Number();
希望在思想上对你有帮助 参考技术B 这个我也知道,我现在就是装饰类的执行过程分析不明白,所以才这问的!这程序就是个框架而已,不复杂,装饰类这个过程细节没弄明白!希望前辈们给我指点!
jav小问题,请前辈指点哈
public class ReadLine
public static void main(String[] args)
byte [] buf = new byte[1024];
String strInfo = null;
int pos = 0;
int ch = 0;
System.out.println("please entrer:");
while(true)
try
ch = System.in.read();
catch(Exception e)
System.out.println(e.getMessage());
switch(ch)
case'\r':
break;
case'\n':
strInfo = new String(buf,0,pos);
if(strInfo.equalsIgnoreCase("bye"))
return;
else
System.out.println(strInfo);
pos = 0;
break;
default:
buf[pos++] = (byte)ch;
这里的ch可不可以用直接用Byte类型;
还有switch这个语句块可不可以详细分析一下他的操作过程,是怎么运作的。谢谢
就是
case'\r':
break;
case'\n':这个事怎么回事,是怎么运作的
如果你的读取方式不用System.in.read(), 而是用Scanner 的话, 就可以直接读取byte, Scanner in = new Scanner(System.in);
byte ch = in.nextByte();
switch 语句就和if else if 差不多, 它判断你switch()中的值, 和下面case 中的值以不一样, 如果一样, 就执行case后面的代码, 所以如果你不用break 的话, 就继续执行下面的case 语句, 注意case 只有效一次, 也就是说, 一旦case 的值和switch的是一样的, 那么下面的case 都不会判断了, 举个例子:
int i = 2;
switch (2)
case 1:
System.out.println(1);
case 2:
System.out.println(2);
case 3:
System.out.println(3);
break;
case 4:
System.out.println(4);
那么显示的结果就是
2
3 参考技术A switch接受的最大类型是int,比int大的就不行了,比如long。float,比int小的byte,short,char都可以,这里大类型的意思就是在内存里占的位数比较int长。
另外enum型的也可以。Byte型经过java1.5版本以上反包装应该也可以,1.4就不行了。
switch执行就是一个case一个case找,找到符合条件的就不再比较了,只要不遇到break就一直执行下去,所以如果忘写break可能在第一个条件符合以后所有的代码都会执行 参考技术B 第一ch可用byte类型 .但 因为在System.in.read();时返回的是一个int.你用int就直接搞定.若用byte时我看还需要进一步的转化.还不如用int来的简单.所以推荐用int而不是其他类型.
第二.switch就是if的另外一种实现
p.s 楼上正解........
就是当为\r时接着运行.当为\n开始判断你输入的是什么东东.要是bye时就退出.
要不就打印东东.
\r应该是空格
\n应该是换行
以上是关于装饰设计模式(C#)求知,请前辈们指点,万分感谢的主要内容,如果未能解决你的问题,请参考以下文章
请教一个批量删除文本文件中多余回车或提取文本中前两行数据的shell脚本,请高手指点,万分感谢