我正在尝试用装饰图案做一些比萨饼(请耐心等待):
假设我有以下内容:
interface Pizza {
public String makePizza();
}
class PlainPizza implements Pizza {
@Override
public String makePizza() {
return "Base Pizza";
}
}
然后我有一个总装饰师:
abstract class PizzaDecorator implements Pizza {
protected Pizza specialPizza;
public PizzaDecorator(Pizza specialPizza) {
this.specialPizza = specialPizza;
}
public String makePizza() {
return specialPizza.makePizza();
}
}
以及装饰器的两种实现:
class SausageDecorator extends PizzaDecorator {
public SausageDecorator(Pizza specialPizza) {
super(specialPizza);
}
public String makePizza() {
return specialPizza.makePizza() + addSausage();
}
private String addSausage() {
return " + sausage";
}
}
class OliveDecorator extends PizzaDecorator {
public OliveDecorator(Pizza specialPizza) {
super(specialPizza);
}
public String makePizza() {
return specialPizza.makePizza() + addOlives();
}
private String addOlives() {
return " + olives";
}
}
问题是我可以有重复的装饰者。
我如何改变这段代码的结构来添加一个“唯一性”约束——也就是说,每个装饰器最多只能出现一次?(我家披萨店不允许顾客拿双份香肠,抱歉!)
class PizzaMaker
{
public static void main (String[] args)
{
Pizza pizza = new SausageDecorator(new SausageDecorator(new OliveDecorator(new PlainPizza())));
System.out.println(pizza.makePizza());
}
}
输出:基础披萨橄榄香肠香肠
为了添加唯一约束,您可以定义一个接口
,称为UniqueTop
,如下所示:
public interface UniqueTopping {
public String getTopping();
public void addTopping();
}
并让您的装饰器类< code>PlainPizza类实现它。
在您的装饰器类中,有一个名为topping
的私有变量并实现getTop()
,addTop()
如下所示:
class SausageDecorator extends PizzaDecorator implements UniqueTopping {
private String topping = "";
public SausageDecorator(Pizza specialPizza) {
super(specialPizza);
}
public String makePizza() {
addTopping();
return specialPizza.makePizza() + " " + getTopping();
}
@Override
public String getTopping() {
return topping;
}
@Override
public void addTopping() {
if ( !specialPizza.getTopping().equals(getTopping()) ) {
topping = "sausage";
}
}
}
请参阅 addTopping()
仅在构造函数中传递的特殊Pizza
具有不同的顶端
时才添加。getTopping()
只返回 addTopping()
中添加的 top
。
此外,您的<code>PlainPizza</code>应实现<code>UniqueTopping</code>以返回空<code>topping,如下所示:
class PlainPizza implements Pizza, UniqueTopping {
@Override
public String makePizza() {
return "Base Pizza";
}
@Override
public String getTopping() {
return "";
}
@Override
public void addTopping() {
}
}
问题内容: 我有一种情况,我只想在其他字段中有特定值的情况下才添加唯一约束(例如表为ID CategoryName名称值Value CategoryID) 约束将在ID,CategoryName和Name上,只有CategoryID为0 是否有可能? 问题答案:
这是我的限制: 该查询证明约束实际上不起作用: 下面是输出: 为什么唯一性没有被强制执行?
我有一张桌子,不知怎的,同一个人进了我的桌子两次。现在,主键只是一个自动编号,但还有两个字段存在,我想强制它们是唯一的。 例如,这些字段是: 我只想要一张带有唯一PersonNumber和Active=1的唱片 (因此这两个字段的组合必须是唯一的) SQL server中现有表的最佳方式是什么?我可以这样做,如果其他任何人使用与现有值相同的值进行插入,则插入失败,因此我不必在应用程序代码中担心这一
主要内容:介绍,实现,Shape.java,Rectangle.java,Circle.java,ShapeDecorator.java,RedShapeDecorator.java,DecoratorPatternDemo.java装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。 这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。 我
装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。 这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。 我们通过下面的实例来演示装饰器模式的用法。其中,我们将把一个形状装饰上不同的颜色,同时又不改变形状类。 介绍 意图:动态地给一个对象添加
装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。 这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。 我们通过下面的实例来演示装饰器模式的用法。其中,我们将把一个形状装饰上不同的颜色,同时又不改变形状类。 介绍 意图:动态地给一个对象添加